Kinh Nghiệm về Hướng dẫn np vstack trong python Chi Tiết
You đang tìm kiếm từ khóa Hướng dẫn np vstack trong python được Cập Nhật vào lúc : 2022-10-05 08:00:27 . Với phương châm chia sẻ Mẹo về trong nội dung bài viết một cách Chi Tiết Mới Nhất. Nếu sau khi tìm hiểu thêm Post vẫn ko hiểu thì hoàn toàn có thể lại Comment ở cuối bài để Ad lý giải và hướng dẫn lại nha.
Tôi nghĩ đoạn mã sau minh họa sự khác lạ một cách độc lạ:
>>> np.vstack(([1,2,3],[4,5,6]))
array([[1, 2, 3],
[4, 5, 6]])
>>> np.column_stack(([1,2,3],[4,5,6]))
array([[1, 4],
[2, 5],
[3, 6]])
>>> np.hstack(([1,2,3],[4,5,6]))
array([1, 2, 3, 4, 5, 6])
Tôi đã và đang đưa vào hstackđể so sánh. Lưu ý cách column_stackngăn xếp dọc theo chiều thứ hai trong lúc vstackngăn xếp dọc theo chiều thứ nhất. Tương đương với column_stacklà hstacklệnh sau :
>>> np.hstack(([[1],[2],[3]],[[4],[5],[6]]))
array([[1, 4],
[2, 5],
[3, 6]])
Tôi kỳ vọng toàn bộ chúng ta hoàn toàn có thể đồng ý rằng column_stackthuận tiện hơn.
103 hữu ích 0 phản hồi chia sẻ
Tôi chỉ muốn biết tôi đã sai ở đâu. Có vẻ
như vstackchức năng sẽ hoạt động và sinh hoạt giải trí nhưng có lẽ rằng tôi đang thiếu một chiếc gì đó.
TL; DR: Đó không phải vstacklà yếu tố. Vấn đề là bạn có những đường dẫn mã nỗ lực gán nhiều chủng loại mảng rất khác nhau cho cùng một biến (điều này ném ra ngoại lệ hợp nhất đó).
Vấn đề nằm ở vị trí đây:
# Populate a_mat and b_mat
if i == 0:
a_mat = a
b_mat = b
else:
a_mat = np.vstack((a_mat, a))
b_mat = np.vstack((b_mat, b))
Trong mã con phố thứ nhất bạn gán một c-contigous mảng float64 1d để a_matvà b_matvà trong elseđó là một c tiếp giáp mảng float64 2d. Các loại này sẽ không còn tương thích và do đó numba tạo ra
lỗi. Đôi khi thật trở ngại vất vả khi mã numba không hoạt động và sinh hoạt giải trí như mã Python , nơi bạn có loại nào không quan trọng khi bạn gán một thứ gì đó cho một biến. Tuy nhiên trong những bản phát hành mới gần đây, những thông báo ngoại lệ numba đã tốt hơn thật nhiều, vì vậy nếu bạn biết ngoại lệ gợi ý gì, bạn hoàn toàn có thể nhanh gọn tìm ra yếu tố là gì.
Giải thích dài hơn thế nữa
Vấn đề là numba suy diễn ngầm nhiều chủng loại biến của bạn. Ví dụ:
from numba import njit
@njit
def func(arr):
a = arr
return a
Ở đây tôi chưa nhập hàm nên tôi cần chạy nó một
lần:
>>> import numpy as np
>>> func(np.zeros(5))
array([0., 0., 0., 0., 0.])
Sau đó, bạn hoàn toàn có thể kiểm tra nhiều chủng loại:
>>> func.inspect_types()
func (array(float64, 1d, C),)
——————————————————————————–
# File: <ipython-input-4-02470248b065>
# — LINE 3 —
# label 0
@njit
# — LINE 4 —
def func(arr):
# — LINE 5 —
# arr = arg(0, name=arr) :: array(float64, 1d, C)
# a = arr :: array(float64, 1d, C)
# del arr
a = arr
# — LINE 6 —
# $0.3 = cast(value=a) :: array(float64, 1d, C)
# del a
# return $0.3
return a
Như bạn hoàn toàn có thể thấy, biến ađược nhập cho nguồn vào có kiểu array(float64, 1d, C)là array(float64, 1d, C).
Bây giờ, hãy sử dụng np.vstackthay thế:
from numba import njit
import numpy as np
@njit
def func(arr):
a = np.vstack((arr, arr))
return a
Và lệnh gọi thứ nhất bắt buộc để biên dịch nó:
>>> func(np.zeros(5))
array([[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]])
Sau đó kiểm tra lại nhiều chủng loại:
func (array(float64, 1d, C),)
——————————————————————————–
# File: <ipython-input-11-f0214d5181c6>
# — LINE 4 —
# label 0
@njit
# — LINE 5 —
def func(arr):
# — LINE 6 —
# arr = arg(0, name=arr) :: array(float64, 1d, C)
# $0.1 = global(np: <module ‘numpy’>) :: Module(<module ‘numpy’>)
# $0.2 = getattr(value=$0.1, attr=vstack) :: Function(<function vstack 0x000001DB7082A400>)
# del $0.1
# $0.5 = build_tuple(items=[Var(arr, <ipython-input-11-f0214d5181c6> (6)), Var(arr, <ipython-input-11-f0214d5181c6> (6))]) :: tuple(array(float64, 1d, C) x 2)
# del arr
# $0.6 = call $0.2($0.5, func=$0.2, args=[Var($0.5, <ipython-input-11-f0214d5181c6> (6))], kws=(), vararg=None) :: (tuple(array(float64, 1d, C) x 2),) -> array(float64, 2d, C)
# del $0.5
# del $0.2
# a = $0.6 :: array(float64, 2d, C)
# del $0.6
a = np.vstack((arr, arr))
# — LINE 7 —
# $0.8 = cast(value=a) :: array(float64, 2d, C)
# del a
# return $0.8
return a
Thời gian anày được nhập như array(float64, 2d, C)cho một nguồn vào của array(float64, 1d, C).
Bạn hoàn toàn có thể đã tự hỏi mình tại sao tôi lại nói về điều này. Hãy xem điều gì sẽ xẩy ra nếu bạn cố
gắng gán có Đk cho a:
from numba import njit
import numpy as np
@njit
def func(arr, condition):
if condition:
a = np.vstack((arr, arr))
else:
a = arr
return a
Nếu giờ đây bạn chạy mã:
>>> func(np.zeros(5), True)
TypingError: Failed nopython (nopython frontend)
Cannot unify array(float64, 2d, C) and array(float64, 1d, C) for ‘a’, defined <ipython-input-16-f4bd9a4f377a> (7)
File “<ipython-input-16-f4bd9a4f377a>”, line 7:
def func(arr, condition):
<source elided>
if condition:
a = np.vstack((arr, arr))
^
[1] During: typing of assignment <ipython-input-16-f4bd9a4f377a> (9)
File “<ipython-input-16-f4bd9a4f377a>”, line 9:
def func(arr, condition):
<source elided>
else:
a = arr
^
Đó đúng là yếu tố bạn gặp phải và đó là chính bới những biến nên phải có một và chỉ một kiểu trong numba cho một tập hợp những kiểu nguồn vào cố định và thắt chặt . Và chính bới loại dtype, thứ hạng (số thứ nguyên) và thuộc tính liền kề đều là một phần của kiểu nên bạn không thể gán những mảng có kích thước rất khác nhau cho cùng một biến.
Lưu ý rằng bạn hoàn toàn có thể mở rộng những kích thước để làm cho nó hoạt
động và ép lại những kích thước không thiết yếu từ kết quả (hoàn toàn có thể không đẹp lắm nhưng nó sẽ xử lý và xử lý được yếu tố với số lượng “thay đổi” tối thiểu:
from numba import njit
import numpy as np
@njit
def func(arr, condition):
if condition:
a = np.vstack((arr, arr))
else:
a = np.expand_dims(arr, 0)
return a
>>> func(np.zeros(5), False)
array([[0., 0., 0., 0., 0.]]) # <– 2d array!
>>> func(np.zeros(5), True)
array([[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]])
13 hữu ích 1 phản hồi chia sẻ
Tải thêm tài liệu liên quan đến nội dung bài viết Hướng dẫn np vstack trong python
programming
python
np.array trong python
NumPy Python
NumPy array append
Python NumPy tutorial
Tạo mảng NumPy
Reply
3
0
Chia sẻ
Share Link Download Hướng dẫn np vstack trong python miễn phí
Bạn vừa tìm hiểu thêm nội dung bài viết Với Một số hướng dẫn một cách rõ ràng hơn về Video Hướng dẫn np vstack trong python tiên tiến và phát triển nhất và Chia Sẻ Link Down Hướng dẫn np vstack trong python miễn phí.
Giải đáp vướng mắc về Hướng dẫn np vstack trong python
Nếu sau khi đọc nội dung bài viết Hướng dẫn np vstack trong python vẫn chưa hiểu thì hoàn toàn có thể lại Comments ở cuối bài để Tác giả lý giải và hướng dẫn lại nha
#Hướng #dẫn #vstack #trong #python