Remoção de elementos de matriz em Python, mantendo o controle de sua posição
Pergunta
I'v tenho duas matrizes numpy. A primeira matriz contém alguns zeros (que estão distribuídos aleatoriamente ao longo do comprimento da matriz), que gostaria de remover.
Meu problema é que eu também gostaria de remover as entradas da segunda matriz nas posições de índice onde os primeiros elementos da matriz são zero.
Eu só veio com um muito pesado para-loop. Alguém tem um método "elegante" para fazer isso?
Thx!
Solução
É o que você quer? Eu sou um novato NumPy.
In [1]: import numpy as np
In [2]: a = np.array([1,2,0,3,0,4])
In [3]: b = np.array([1,2,3,4,5,6])
In [4]: b[np.where(a)]
Out[4]: array([1, 2, 4, 6])
In [5]: np.where(a)
Out[5]: (array([0, 1, 3, 5]),)
In [6]: a[np.where(a)]
Out[6]: array([1, 2, 3, 4])
Outras dicas
Você pode usar boolean indexação. x! = 0 dá-lhe uma matriz booleana com Verdadeira onde x! = 0 false onde x == 0. Se você índice x ou y com este array (ie x_nozeros = x [x! = 0]), então você vai ter apenas os elementos onde x! = 0. por exemplo:
In [1]: import numpy as np
In [2]: x = np.array([1,2,0,3,0,4])
In [3]: y = np.arange(1,7)
In [4]: indx = x!=0
In [5]: x_nozeros = x[indx]
In [6]: y_nozeros = y[indx]
In [7]: x_nozeros
Out[7]: array([1, 2, 3, 4])
In [8]: y_nozeros
Out[8]: array([1, 2, 4, 6])