Remoção de elementos de matriz em Python, mantendo o controle de sua posição

StackOverflow https://stackoverflow.com/questions/1624395

  •  06-07-2019
  •  | 
  •  

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!

Foi útil?

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])
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top