¿Cuál es la diferencia entre np.array() y np.asarray()?
¿ Cuál es la diferencia entre NumPy np.array
y np.asarray
? ¿Cuándo debo utilizar uno en lugar del otro? Parecen generar resultados idénticos.
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
. array
tiene copy=True
por defecto.
La principal diferencia es que array
(por defecto) hará una copia del objeto, mientras que asarray
no lo hará a menos que sea necesario.
Dado que otras preguntas se redirigen a esta que pregunta sobre asanyarray
u 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.
array
ofrece 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 a
que es an ndarray
y m
es a matrix
, y ambos tienen un dtype
de float32
:
np.array(a)
ynp.array(m)
copiará ambos, porque ese es el comportamiento predeterminado.np.array(a, copy=False)
ynp.array(m, copy=False)
copiarám
pero noa
, porquem
no es unndarray
.np.array(a, copy=False, subok=True)
ynp.array(m, copy=False, subok=True)
no copiará ninguno de los dos, porquem
es unmatrix
, que es una subclase dendarray
.np.array(a, dtype=int, copy=False, subok=True)
Copiará ambos, porquedtype
no es compatible.
La mayoría de las otras funciones son envoltorios finos alrededor array
de ese control cuando se realiza la copia:
asarray
: La entrada se devolverá sin copiar si es compatiblendarray
(copy=False
).asanyarray
: La entrada se devolverá sin copiar si es compatiblendarray
o una subclase comomatrix
(copy=False
,subok=True
).ascontiguousarray
: La entrada se devolverá sin copiar si es compatiblendarray
en orden C contiguo (copy=False
,order='C')
.asfortranarray
: La entrada se devolverá sin copiar si es compatiblendarray
en 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 unaobject
matriz con el iterador); siempre copiado.
También hay funciones de conveniencia, como asarray_chkfinite
(las mismas reglas de copia que asarray
, pero aumenta ValueError
si hay alguno nan
o inf
valores), y constructores para subclases como matrix
o para casos especiales como matrices de registros y, por supuesto, el ndarray
constructor real (que le permite crear una matriz directamente). fuera de zancadas sobre un buffer).