В чем разница между ndarray
и array
в Numpy? И где я могу найти реализации в исходном коде numpy?
В чем разница между ndarray и array в 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()
когда вы указываете порядок, который он создает на основе предоставленного порядка.