Cuál es la diferencia entre ndarray
y array
en numpy? ¿Dónde está su implementación en el código fuente de NumPy?
¿Cuál es la diferencia entre ndarray y array en NumPy?
flxb
ingenio
numpy.array
es solo una función de conveniencia para crear un ndarray
; no es una clase en sí misma.
También puede crear una matriz usando numpy.ndarray
, pero no es la forma recomendada. De la cadena de documentación de numpy.ndarray
:
Los arreglos deben construirse usando
array
,zeros
oempty
… Los parámetros dados aquí se refieren a un método de bajo nivel (ndarray(...)
) para instanciar una matriz.
La mayor parte de la carne de la implementación está en código C, aquí en multiarreglopero puedes empezar a mirar las interfaces de ndarray aquí:
https://github.com/numpy/numpy/blob/master/numpy/core/numeric.py
-
Creo que array() está implementado en core/src/multiarray/métodos.c en array_getarray().
– flxb
08/04/2013 a las 13:14
-
Esto te puede morder si lo olvidas
np.array
no es una clase, como suelo hacer.x = np.array([1,2.1,3])
if isinstance(x,np.array): # will give you a TypeError
– Steve L.
11 de julio de 2017 a las 14:53
-
¿Aún no tienes idea de por qué deberías evitar usar ndarray? ¿Porque es de bajo nivel?
– GabrielChu
9 de septiembre de 2018 a las 11:18
-
Entonces, ¿por qué no se recomienda?
– Sin nombre
5 de diciembre de 2019 a las 6:05
-
Por lo general, cuando tienes un tipo (es decir,
ndarray
) que es complicado de construir métodos de fábrica comoarray
,zeros
etc. se proporcionan para garantizar que se construya correctamente. También quizás los desarrolladores numpy prefieran mantener las interfaces dearray
,zeros
sin cambios de un lanzamiento a otro, pero no ofrecen las mismas garantías dendarray()
–David Waterworth
20 de diciembre de 2020 a las 2:52
Ramón J Romero y Vigil
numpy.array
es una función que devuelve un numpy.ndarray
objeto.
No hay objeto de tipo numpy.array
.
Ying
Solo unas pocas líneas de código de ejemplo para mostrar la diferencia entre numpy.array y numpy.ndarray
Paso de calentamiento: construir una lista
a = [1,2,3]
comprobar el tipo
print(type(a))
Conseguirás
<class 'list'>
Construya una matriz (a partir de una lista) usando np.array
a = np.array(a)
O bien, puede omitir el paso de calentamiento, tener directamente
a = np.array([1,2,3])
comprobar el tipo
print(type(a))
Conseguirás
<class 'numpy.ndarray'>
que te dice el tipo de matriz numpy es numpy.ndarray
También puede comprobar el tipo por
isinstance(a, (np.ndarray))
y obtendrás
True
Cualquiera de las siguientes dos líneas le dará un mensaje de error
np.ndarray(a) # should be np.array(a)
isinstance(a, (np.array)) # should be isinstance(a, (np.ndarray))
Mahmud Elshahat
numpy.ndarray()
es una clase, mientras que numpy.array()
es un método / función para crear ndarray
.
En numpy docs si desea crear una matriz a partir de ndarray
clase puede hacerlo de 2 maneras como se cita:
1- usando array()
, zeros()
o empty()
métodos:
Los arreglos deben construirse usando arreglos, ceros o vacíos (consulte la sección Consulte también a continuación). Los parámetros dados aquí se refieren a un método de bajo nivel (ndarray(…)
) para instanciar una matriz.
2- de ndarray
clase directamente:
Hay dos modos de crear una matriz usando __new__
: si el búfer es Ninguno, solo se utilizan la forma, el tipo de d y el orden. Si el búfer es un objeto que expone la interfaz del búfer, se interpretan todas las palabras clave.
El siguiente ejemplo proporciona una matriz aleatoria porque no asignamos un valor de búfer:
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
otro ejemplo es asignar un objeto de matriz al ejemplo de búfer:
>>> 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])
del ejemplo anterior notamos que no podemos asignar una lista a “búfer” y tuvimos que usar numpy.array() para devolver el objeto ndarray para el búfer
Conclusión: uso numpy.array()
si quieres hacer un numpy.ndarray()
objeto”
sujith rao
pienso con np.array()
solo puede crear C como aunque mencione el orden, cuando marca usando np.isfortran()
dice falso. pero con np.ndarrray()
cuando especifica el pedido que crea en función del pedido proporcionado.