Supongamos que he definido una matriz 2×2 usando numpy:
array([[1, 2], [2, 3]])
Ahora la otra matriz 2×1:
array([[3], [4]])
¿Cómo puedo concatenar estos 2 matrices por columna, para que se convierta en:
array([[1, 2, 3], [2, 3, 4]])
¿Y cómo también puedo eliminar la columna de especificación, para que se convierta en
array([[1], [2]])
Hay un método numpy.concatenate
import numpy as np np.concatenate( [ np.array( [ [1,2], [2,3] ] ), np.array( [ [3],[4] ] ) ] , axis = 1)
o simplemente usa hstack
o vstack
np.hstack( [ np.array( [ [1,2], [2,3] ] ), np.array( [ [3],[4] ] ) ] )
También se pueden usar para eliminar la columna (concatenar dos subarreglos), esto se puede usar para eliminar muchas columnas.
Para eliminar la i’th column puede tomar subarreglos a esta columna, y de la siguiente, y concatenarlos. Por ejemplo, para eliminar la segunda columna (índice 1
):
a - np.array( [ [1,2,3], [2,3,4] ] ) a1= a[:,:1] a2= a[:,2:] np.hstack([a1,a2])
asi que en general
def remove_column( a, i ): return np.hstack( [a[:,:i], a[:,(i+1):] ] )
y entonces
>>> remove_column(a, 1) array([[1, 3], [2, 4]]) >>> remove_column(a, 0) array([[2, 3], [3, 4]])
En realidad, como se señaló en el comentario, numpy implementa su propio método de delete
np.delete(a, 1, 1)
segunda columna eliminada
y eliminar varios se puede realizar utilizando
np.delete(a, [column1, columne2, ..., columnK], 1)
El tercer argumento es el especificador de ejes, 0
implicaría filas, 1
columnas, None
aplana toda la matriz
Puedes usar numpy.hstack
:
>>> import numpy as np >>> a = np.array([[1,2], [2,3]]) >>> b = np.array([[3], [4]]) >>> np.hstack((a,b)) array([[1, 2, 3], [2, 3, 4]])
Eliminar es aún más fácil, solo rebana
>>> c = a[:,:1] array([[1], [2]])
In [3]: x = np.array([[1, 2], [2, 3]] In [4]: y = np.array([[3], [4]]) In [9]: z = np.hstack([x, y]) In [10]: z Out[10]: array([[1, 2, 3], [2, 3, 4]]) In [11]: z[:,:1] array([[1], [2]])