Відповіді:
numpy.array
- це лише зручність функції для створення ndarray
; це не сам клас.
Ви також можете створити масив за допомогою numpy.ndarray
, але це не рекомендований спосіб. З докстрингу numpy.ndarray
:
Масиви повинні бути побудовані з використанням
array
,zeros
абоempty
... Параметри, наведені тут, відносяться до методу низького рівня (ndarray(...)
) для ідентифікації масиву.
Більша частина м'яса реалізації знаходиться в коді С, тут - у багатомагнітному масиві , але ви можете почати дивитися на інтерфейси ndarray тут:
https://github.com/numpy/numpy/blob/master/numpy/core/numeric.py
np.array
це не клас, як я часто це роблю. x = np.array([1,2.1,3])
if isinstance(x,np.array): # will give you a TypeError
array_getarray
це реалізація numpy.ndarray.__array__
. numpy.array
починається з _array_fromobject
, принаймні, в поточній реалізації.
numpy.array
це функція, яка повертає a numpy.ndarray
. Немає об’єкта типу numpy.array.
Всього кілька рядків прикладу коду, щоб показати різницю між numpy.array та numpy.ndarray
Крок розминки: побудова списку
a = [1,2,3]
Перевірте тип
print(type(a))
Ти отримаєш
<class 'list'>
Побудуйте масив (зі списку) за допомогою np.array
a = np.array(a)
Або, ви можете пропустити крок розминки, безпосередньо мати
a = np.array([1,2,3])
Перевірте тип
print(type(a))
Ти отримаєш
<class 'numpy.ndarray'>
який повідомляє вам тип масиву numpy - numpy.ndarray
Ви також можете перевірити тип
isinstance(a, (np.ndarray))
і ви отримаєте
True
Будь-який із наступних двох рядків надішле вам повідомлення про помилку
np.ndarray(a) # should be np.array(a)
isinstance(a, (np.array)) # should be isinstance(a, (np.ndarray))
numpy.ndarray()
є класом, в той час numpy.array()
як метод / функція для створення ndarray
.
У numpy docs, якщо ви хочете створити масив з ndarray
класу, ви можете це зробити двома способами, як цитується:
1 використовуючи array()
, zeros()
або empty()
методи:
Масиви повинні бути побудовані з використанням масиву, нулі або порожні (див також розділ нижче). Параметри, наведені тут, відносяться до методу низького рівня ( ndarray(…)
) для ідентифікації масиву.
2- з ndarray
класу безпосередньо:
Є два режими створення масиву за допомогою __new__
: Якщо буфера немає, тоді використовуються лише форма, тип і порядок. Якщо буфер є об'єктом, що відкриває буферний інтерфейс, то всі ключові слова інтерпретуються.
Наведений нижче приклад дає випадковий масив, оскільки ми не призначили значення буфера:
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
Інший приклад - присвоєння об’єкту масиву прикладу буфера:
>>> 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])
З наведеного вище прикладу ми помічаємо, що ми не можемо призначити список "буфері", і нам довелося використовувати numpy.array () для повернення об'єкта ndarray для буфера
Висновок: використовуйте, numpy.array()
якщо ви хочете зробити numpy.ndarray()
об’єкт "
Я думаю, що з np.array()
вами ви можете створити лише C на зразок, хоча ви згадуєте про порядок, коли ви перевіряєте, чи використовуєте np.isfortran()
його, пише false. але np.ndarrray()
коли ви вказуєте порядок, він створюється на основі наданого замовлення.