Відповіді:
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()коли ви вказуєте порядок, він створюється на основі наданого замовлення.