Desde otras preguntas están siendo redirigidos a esta que preguntar sobre asanyarray
o otras rutinas de creación de la matriz , es probable que vale la pena tener un resumen breve de lo que hace cada uno de ellos.
Las diferencias se refieren principalmente a cuándo devolver la entrada sin cambios, en lugar de hacer una nueva matriz como copia.
array
ofrece una amplia variedad de opciones (la mayoría de las otras funciones son envoltorios delgados a su alrededor), incluidas banderas para determinar cuándo copiar. Una explicación completa tomaría tanto tiempo como los documentos (vea Creación de matrices , pero brevemente, aquí hay algunos ejemplos:
Supongamos que a
es un ndarray
, y m
es un matrix
, y ambos tienen una dtype
de 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á m
pero no a
, porque m
no es un ndarray
.np.array(a, copy=False, subok=True)
y np.array(m, copy=False, subok=True)
no copiará ninguno, porque m
es un matrix
, que es una subclase de ndarray
.np.array(a, dtype=int, copy=False, subok=True)
copiará ambos, porque el dtype
no es compatible.La mayoría de las otras funciones son envoltorios delgados alrededor de array
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 una ndarray
subclase compatible o como matrix
( copy=False
, subok=True
).ascontiguousarray
: La entrada se devolverá sin copiar si es compatible ndarray
en orden C contiguo ( copy=False
, order='C')
.asfortranarray
: La entrada se devolverá sin copiar si es compatible ndarray
en el orden contiguo de Fortran ( 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 ejemplo, puede construir una matriz a partir de elementos de un iterador, en lugar de una object
matriz con el iterador); siempre copiadoTambié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 búfer).
La definición de
asarray
es:Entonces es como
array
, excepto que tiene menos opciones, ycopy=False
.array
tienecopy=True
por defecto.La principal diferencia es que
array
(por defecto) hará una copia del objeto, mientrasasarray
que no lo hará a menos que sea necesario.fuente
array([1, 2, 3])
oasarray([1, 2, 3])
?[1, 2, 3]
es una lista de Python, por lo que se debe hacer una copia de los datos para crear elndarary
. Por lo tanto, usenp.array
directamente en lugar denp.asarray
lo que enviaría elcopy=False
parámetronp.array
. Secopy=False
ignora si se debe hacer una copia como sería en este caso. Si compara los dos usando%timeit
IPython, verá una diferencia para las listas pequeñas, pero no importa cuál use para las listas grandes.np.asanyarray
?asarray
siempre devuelve unndarray
.asanyarray
devolverá una subclase dendarray
si eso es lo que se le pasó. Por ejemplo, annp.matrix
es una subclase dendarray
. Entoncesnp.asanyarray(np.matrix(...))
devuelve la misma matriz, mientras quenp.asarray(np.matrix(...))
convierte la matriz en anndarray
.La diferencia se puede demostrar con este ejemplo:
generar una matriz
usar
numpy.array
para modificarA
. No funciona porque estás modificando una copiausar
numpy.asarray
para modificarA
. Funcionó porque está modificandoA
propio¡Espero que esto ayude!
fuente
Las diferencias se mencionan claramente en la documentación de
array
yasarray
. Las diferencias se encuentran en la lista de argumentos y, por lo tanto, en la acción de la función en función de esos parámetros.Las definiciones de funciones son:
y
Los siguientes argumentos son aquellos a los que se puede pasar
array
y noasarray
como se menciona en la documentación:fuente
Aquí hay un ejemplo simple que puede demostrar la diferencia.
La principal diferencia es que la matriz hará una copia de los datos originales y, utilizando diferentes objetos, podemos modificar los datos en la matriz original.
Los contenidos en la matriz (a) permanecen intactos, y aún así, podemos realizar cualquier operación en los datos utilizando otro objeto sin modificar el contenido en la matriz original.
fuente
asarray(x)
es comoarray(x, copy=False)
Úselo
asarray(x)
cuando desee asegurarse de quex
será una matriz antes de realizar cualquier otra operación. Six
ya es una matriz, no se realizará ninguna copia. No causaría un impacto de rendimiento redundante.Aquí hay un ejemplo de una función que garantiza que
x
se convierta primero en una matriz.fuente