Câu trả lời:
numpy.array
chỉ là một chức năng tiện lợi để tạo ra một ndarray
; bản thân nó không phải là một lớp
Bạn cũng có thể tạo một mảng bằng cách sử dụng numpy.ndarray
, nhưng đó không phải là cách được đề xuất. Từ chuỗi của numpy.ndarray
:
Mảng nên được xây dựng bằng cách sử dụng
array
,zeros
hoặcempty
... Các tham số được đưa ra ở đây đề cập đến một phương thức cấp thấp (ndarray(...)
) để khởi tạo một mảng.
Hầu hết phần cốt lõi của việc triển khai là ở mã C, ở đây trong multiarray , nhưng bạn có thể bắt đầu xem xét các giao diện ndarray ở đây:
https://github.com/numpy/numpy/blob/master/numpy/core/numeric.py
np.array
không phải là một lớp học, như tôi thường làm. x = np.array([1,2.1,3])
if isinstance(x,np.array): # will give you a TypeError
array_getarray
là việc thực hiện numpy.ndarray.__array__
. numpy.array
bắt đầu tại _array_fromobject
, ít nhất là trong việc thực hiện hiện tại.
numpy.array
là hàm trả về a numpy.ndarray
. Không có loại đối tượng numpy.array.
Chỉ cần một vài dòng mã ví dụ để hiển thị sự khác biệt giữa numpy.array và numpy.ndarray
Bước khởi động: Xây dựng danh sách
a = [1,2,3]
Kiểm tra loại
print(type(a))
Bạn sẽ nhận được
<class 'list'>
Xây dựng một mảng (từ một danh sách) bằng cách sử dụng np.array
a = np.array(a)
Hoặc, bạn có thể bỏ qua bước khởi động, trực tiếp có
a = np.array([1,2,3])
Kiểm tra loại
print(type(a))
Bạn sẽ nhận được
<class 'numpy.ndarray'>
Nó cho bạn biết loại mảng numpy là numpy.ndarray
Bạn cũng có thể kiểm tra loại bằng cách
isinstance(a, (np.ndarray))
và bạn sẽ nhận được
True
Một trong hai dòng sau sẽ cung cấp cho bạn một thông báo lỗi
np.ndarray(a) # should be np.array(a)
isinstance(a, (np.array)) # should be isinstance(a, (np.ndarray))
numpy.ndarray()
là một lớp, trong khi numpy.array()
là một phương thức / hàm để tạo ndarray
.
Trong các tài liệu numpy nếu bạn muốn tạo một mảng từ ndarray
lớp, bạn có thể làm điều đó với 2 cách như được trích dẫn:
1- sử dụng array()
, zeros()
hoặc empty()
các phương pháp:
Mảng nên được xây dựng sử dụng mảng, số không đúng hoặc bỏ trống (tham khảo các See Also phần dưới đây). Các tham số được đưa ra ở đây đề cập đến một phương thức mức thấp ( ndarray(…)
) để khởi tạo một mảng.
2- từ ndarray
lớp trực tiếp:
Có hai chế độ tạo mảng bằng cách sử dụng__new__
: Nếu bộ đệm là Không có thì chỉ sử dụng hình dạng, kiểu chữ và thứ tự. Nếu bộ đệm là một đối tượng phơi bày giao diện bộ đệm, thì tất cả các từ khóa sẽ được diễn giải.
Ví dụ dưới đây cung cấp một mảng ngẫu nhiên vì chúng tôi đã không gán giá trị bộ đệm:
np.ndarray(shape=(2,2), dtype=float, order='F', buffer=None) array([[ -1.13698227e+002, 4.25087011e-303], [ 2.88528414e-306, 3.27025015e-309]]) #random
một ví dụ khác là gán đối tượng mảng cho ví dụ bộ đệm:
>>> np.ndarray((2,), buffer=np.array([1,2,3]), ... offset=np.int_().itemsize, ... dtype=int) # offset = 1*itemsize, i.e. skip first element array([2, 3])
từ ví dụ trên, chúng tôi nhận thấy rằng chúng tôi không thể gán danh sách cho "bộ đệm" và chúng tôi đã phải sử dụng numpy.array () để trả về đối tượng ndarray cho bộ đệm
Kết luận: sử dụng numpy.array()
nếu bạn muốn tạo một numpy.ndarray()
đối tượng "
Tôi nghĩ với np.array()
bạn chỉ có thể tạo C như mặc dù bạn đề cập đến thứ tự, khi bạn kiểm tra bằng cách sử dụng np.isfortran()
nó nói sai. nhưng với np.ndarrray()
khi bạn chỉ định thứ tự nó tạo ra dựa trên thứ tự được cung cấp.