¿Cuál es la diferencia entre np.array() y np.asarray()?

Resuelto Benjamin Hodgson asked hace 11 años • 8 respuestas

¿ Cuál es la diferencia entre NumPy np.arrayy np.asarray? ¿Cuándo debo utilizar uno en lugar del otro? Parecen generar resultados idénticos.

Benjamin Hodgson avatar Jan 19 '13 22:01 Benjamin Hodgson
Aceptado

La definición deasarray es:

def asarray(a, dtype=None, order=None):
    return array(a, dtype, copy=False, order=order)

Es como array, excepto que tiene menos opciones y copy=False. arraytiene copy=Truepor defecto.

La principal diferencia es que array(por defecto) hará una copia del objeto, mientras que asarrayno lo hará a menos que sea necesario.

unutbu avatar Jan 19 '2013 15:01 unutbu

Dado que otras preguntas se redirigen a esta que pregunta sobre asanyarrayu otras rutinas de creación de matrices , probablemente valga la pena tener un breve resumen de lo que hace cada una de ellas.

Las diferencias tienen que ver principalmente con cuándo devolver la entrada sin cambios, en lugar de crear una nueva matriz como copia.

arrayofrece una amplia variedad de opciones (la mayoría de las otras funciones son envoltorios finos), incluidas banderas para determinar cuándo copiar. Una explicación completa tomaría tanto tiempo como los documentos (consulte Creación de matrices , pero brevemente, aquí hay algunos ejemplos:

Supongamos aque es an ndarrayy mes a matrix, y ambos tienen un dtypede float32:

  • np.array(a)y np.array(m)copiará ambos, porque ese es el comportamiento predeterminado.
  • np.array(a, copy=False)y np.array(m, copy=False)copiará mpero no a, porque mno es un ndarray.
  • np.array(a, copy=False, subok=True)y np.array(m, copy=False, subok=True)no copiará ninguno de los dos, porque mes un matrix, que es una subclase de ndarray.
  • np.array(a, dtype=int, copy=False, subok=True)Copiará ambos, porque dtypeno es compatible.

La mayoría de las otras funciones son envoltorios finos alrededor arrayde ese control cuando se realiza la copia:

  • asarray: La entrada se devolverá sin copiar si es compatible ndarray( copy=False).
  • asanyarray: La entrada se devolverá sin copiar si es compatible ndarrayo una subclase como matrix( copy=False, subok=True).
  • ascontiguousarray: La entrada se devolverá sin copiar si es compatible ndarrayen orden C contiguo ( copy=False, order='C').
  • asfortranarray: La entrada se devolverá sin copiar si es compatible ndarrayen orden Fortran contiguo ( copy=False, order='F').
  • require: La entrada se devolverá sin copiar si es compatible con la cadena de requisitos especificada.
  • copy: La entrada siempre se copia.
  • fromiter: La entrada se trata como un iterable (por lo que, por ejemplo, se puede construir una matriz a partir de los elementos de un iterador, en lugar de una objectmatriz con el iterador); siempre copiado.

También hay funciones de conveniencia, como asarray_chkfinite(las mismas reglas de copia que asarray, pero aumenta ValueErrorsi hay alguno nano infvalores), y constructores para subclases como matrixo para casos especiales como matrices de registros y, por supuesto, el ndarrayconstructor real (que le permite crear una matriz directamente). fuera de zancadas sobre un buffer).

abarnert avatar Aug 30 '2018 19:08 abarnert