В чем разница между ndarray и array в numpy?

В чем разница между ndarray и array в Numpy? И где я могу найти реализации в исходном коде numpy?

Ответ 1

numpy.array - это просто numpy.array функция для создания ndarray; это не сам класс.

Вы также можете создать массив, используя numpy.ndarray, но это не рекомендуемый способ. Из строки документации numpy.ndarray:

Массивы должны быть построены с использованием array, zeros или empty... Параметры, приведенные здесь, относятся к низкоуровневому методу (ndarray(...)) для создания экземпляра массива.

Большая часть реализации находится в C-коде, здесь в многопоточном формате, но вы можете начать смотреть на интерфейсы ndarray здесь:

https://github.com/numpy/numpy/blob/master/numpy/core/numeric.py

Ответ 2

numpy.array - это функция, которая возвращает a numpy.ndarray. Нет типа объекта numpy.array.

Ответ 3

Всего несколько строк примера кода, чтобы показать разницу между 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))

Ответ 4

numpy.ndarray() - это класс, а numpy.array() - это метод/функция для создания ndarray.

В numy docs, если вы хотите создать массив из класса ndarray, вы можете сделать это двумя способами, как указано:

1- с использованием методов array(), zeros() или empty(): Массивы должны быть построены с использованием массива, нулей или пустых (см. раздел "См. также" ниже). Параметры, приведенные здесь, относятся к низкоуровневому методу (ndarray(…)) для создания экземпляра массива.

2- из класса ndarray напрямую: Существует два режима создания массива с использованием __new__:   Если в буфере None, то используются только shape, dtype и order.   Если буфер - это объект, представляющий интерфейс буфера, то все ключевые слова интерпретируются.

Пример ниже дает случайный массив, потому что мы не присваиваем значение буфера:

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() "

Ответ 5

Я думаю, что с помощью np.array() вы можете создавать только C, как если бы вы упомянули порядок, когда вы проверяете с помощью np.isfortran() он говорит false. но с помощью np.ndarrray() когда вы указываете порядок, который он создает на основе предоставленного порядка.