¿Cómo se agregan filas a una matriz numpy?
Tengo una matriz A:
A = array([[0, 1, 2], [0, 2, 0]])
Deseo agregar filas a esta matriz desde otra matriz X si el primer elemento de cada fila en X cumple una condición específica.
Las matrices de Numpy no tienen un método 'agregar' como el de las listas, o eso parece.
Si A y X fueran listas, simplemente haría:
for i in X:
if i[0] < 3:
A.append(i)
¿Hay una forma numpythonic de hacer el equivalente?
Gracias S ;-)
Respuestas:
¿Qué es
X
? Si es una matriz 2D, ¿cómo puede comparar su fila con un númeroi < 3
:?EDITAR después del comentario de OP:
agregar a
A
todas las filas desdeX
donde el primer elemento< 3
:fuente
A
. Claramente para problemas pequeños como en esta respuesta, esto no es un problema, pero puede ser más problemático para datos grandes.bueno, puedes hacer esto:
fuente
Como esta pregunta se hizo 7 años antes, en la última versión que estoy usando es la versión numpy 1.13, y python3, estoy haciendo lo mismo agregando una fila a una matriz, recuerde poner un paréntesis doble en el segundo argumento, de lo contrario, aumentará el error de dimensión.
Aquí estoy agregando en la matriz A
con una fila
mismo uso en
np.r_
Solo para interesar a alguien, si desea agregar una columna,
array = np.c_[A,np.zeros(#A's row size)]
siguiendo lo que hicimos antes en la matriz A, agregando una columna
fuente
Si no es necesario realizar cálculos después de cada fila, es mucho más rápido agregar filas en Python y luego convertirlas en numpy. Aquí hay pruebas de tiempo que usan python 3.6 vs. numpy 1.14, agregando 100 filas, una a la vez:
Entonces, la solución simple a la pregunta original, de hace siete años, es usar vstack () para agregar una nueva fila después de convertir la fila en una matriz numpy. Pero una solución más realista debería considerar el bajo rendimiento de vstack en esas circunstancias. Si no necesita ejecutar el análisis de datos en la matriz después de cada adición, es mejor almacenar las nuevas filas en una lista de filas de Python (una lista de listas, realmente) y agregarlas como un grupo a la matriz numpy usando vstack () antes de hacer cualquier análisis de datos.
fuente
También puedes hacer esto:
fuente
np.concatenate((A,newrow), axis=0)
1.12.1
(y en Python 3), parece que se intenta concatenar un vector a una matrizValueError: all the input arrays must have same number of dimensions
. Parece que quiere que el vector se reforme explícitamente en un vector de columna o fila antes de que esté dispuesto a concatenarlo.newrow = [[1,2,3]]
fuente
Si puede hacer la construcción en una sola operación, entonces algo como la respuesta vstack-with-fancy-indexing es un buen enfoque. Pero si su condición es más complicada o sus filas aparecen sobre la marcha, es posible que desee aumentar la matriz. De hecho, la forma numpythonic de hacer algo como esto - crecer dinámicamente una matriz - es hacer crecer dinámicamente una lista:
Las listas están altamente optimizadas para este tipo de patrón de acceso; no tiene una indexación multidimensional numpy conveniente mientras está en forma de lista, pero mientras agregue es difícil hacerlo mejor que una lista de matrices de filas.
fuente
Yo uso 'np.vstack' que es más rápido, EX:
fuente
Puede usar
numpy.append()
para agregar una fila a una matriz numpty y volver a dar forma a una matriz más adelante.fuente