Desde otras preguntas están siendo redirigidos a esta que preguntar sobre asanyarrayo 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.
arrayofrece 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 aes un ndarray, y mes un matrix, y ambos tienen una 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, porque mes un matrix, que es una subclase de ndarray.np.array(a, dtype=int, copy=False, subok=True)copiará ambos, porque el dtypeno es compatible.La mayoría de las otras funciones son envoltorios delgados alrededor de arrayese 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 ndarraysubclase compatible o 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 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 objectmatriz con el iterador); siempre copiadoTambié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 búfer).
La definición de
asarrayes:Entonces es como
array, excepto que tiene menos opciones, ycopy=False.arraytienecopy=Truepor defecto.La principal diferencia es que
array(por defecto) hará una copia del objeto, mientrasasarrayque 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.arraydirectamente en lugar denp.asarraylo que enviaría elcopy=Falseparámetronp.array. Secopy=Falseignora si se debe hacer una copia como sería en este caso. Si compara los dos usando%timeitIPython, verá una diferencia para las listas pequeñas, pero no importa cuál use para las listas grandes.np.asanyarray?asarraysiempre devuelve unndarray.asanyarraydevolverá una subclase dendarraysi eso es lo que se le pasó. Por ejemplo, annp.matrixes 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.arraypara modificarA. No funciona porque estás modificando una copiausar
numpy.asarraypara modificarA. Funcionó porque está modificandoApropio¡Espero que esto ayude!
fuente
Las diferencias se mencionan claramente en la documentación de
arrayyasarray. 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
arrayy noasarraycomo 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 quexserá una matriz antes de realizar cualquier otra operación. Sixya 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
xse convierta primero en una matriz.fuente