¿Cuál es la diferencia entre ndarray y array en numpy?


Respuestas:


221

numpy.arrayes solo una función conveniente 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:

Las matrices deben construirse usando array, zeroso empty... Los parámetros dados aquí se refieren a un método de bajo nivel ( ndarray(...)) para crear instancias de una matriz.

La mayor parte de la carne de la implementación está en el código C, aquí en multiarray , pero puede comenzar a mirar las interfaces ndarray aquí:

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


1
Creo que array () está implementado en core / src / multiarray / method.c en array_getarray ().
flxb

66
Esto puede morderte si olvidas que np.arrayno es una clase, como a menudo hago. x = np.array([1,2.1,3]) if isinstance(x,np.array): # will give you a TypeError
Steve L

44
Todavía no tengo idea de por qué debería evitar usar ndarray? Porque es de bajo nivel?
GabrielChu

@flxb: No, array_getarrayes la implementación de numpy.ndarray.__array__. numpy.arraycomienza en _array_fromobject, al menos en la implementación actual.
user2357112 es compatible con Monica el

2
Entonces, ¿por qué no se recomienda?
NoName


31

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]

Comprueba el tipo

print(type(a))

Conseguirás

<class 'list'>

Construya una matriz (de una lista) usando np.array

a = np.array(a)

O bien, puede omitir el paso de calentamiento, directamente tener

a = np.array([1,2,3])

Comprueba el tipo

print(type(a))

Conseguirás

<class 'numpy.ndarray'>

que te dice que el tipo de matriz numpy es numpy.ndarray

También puede verificar el tipo por

isinstance(a, (np.ndarray))

y obtendrás

True

Cualquiera de las dos líneas siguientes le dará un mensaje de error

np.ndarray(a)                # should be np.array(a)
isinstance(a, (np.array))    # should be isinstance(a, (np.ndarray))

4

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 la ndarrayclase, puede hacerlo de 2 maneras como se cita:

1- usando array(), zeros()o empty()métodos: Las matrices deben construirse usando una matriz, ceros o vacíos (consulte la sección Vea también a continuación). Los parámetros dados aquí se refieren a un método de bajo nivel ( ndarray(…)) para crear instancias de una matriz.

2- de la ndarrayclase directamente: hay dos modos de crear una matriz usando __new__: Si el búfer es Ninguno, entonces solo se utilizan forma, tipo y 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 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 del 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 "buffer" y tuvimos que usar numpy.array () para devolver el objeto ndarray para el buffer

Conclusión: úsala numpy.array()si quieres hacer un numpy.ndarray()objeto "


0

Creo que con np.array()usted solo puede crear C como si mencionara el orden, cuando verifica que usarlo np.isfortran()dice falso. pero con np.ndarrray()cuando especifica el orden que crea en función del orden proporcionado.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.