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

4 minutos de lectura

avatar de usuario
flxb

Cuál es la diferencia entre ndarray y array en numpy? ¿Dónde está su implementación en el código fuente de NumPy?

avatar de usuario
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 o empty … 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 como array,zeros etc. se proporcionan para garantizar que se construya correctamente. También quizás los desarrolladores numpy prefieran mantener las interfaces de array,zeros sin cambios de un lanzamiento a otro, pero no ofrecen las mismas garantías de ndarray()

    –David Waterworth

    20 de diciembre de 2020 a las 2:52

avatar de usuario
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.

avatar de usuario
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))

avatar de usuario
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”

avatar de usuario
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.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad