como encontrar índices de uma matriz numpy 2d ocorrendo em outra matriz 2d [duplicado]
Nov 25 2020
Eu tenho dois arrays numpy 2d e quero descobrir onde um array está ocorrendo em outro:
big_array = np.array([[1., 2., 1.2], [5., 3., 0.12], [-1., 14., 0.], [-9., 0., 13.]])
small_array= np.array([[5., 3., 0.12], [-9., 0., 13.]])
Em seguida, quero obter os índices das linhas big_array
que são iguais a quaisquer linhas de small_array
. Eu quero fazer algo parecido np.in1d
com matrizes 2d. Quer dizer, eu quero ter:
result= [1, 3]
Já tentei o seguinte código, mas não tive sucesso:
result=[([any(i == big_array ) for i in small_array])]
De antemão, agradeço qualquer ajuda.
Respostas
1 Djib2011 Nov 25 2020 at 08:56
O que você quer é:
sum([row in small_array for row in big_array])
Exemplo:
import numpy as np
big_array = np.array([[1., 2., 1.2], [5., 3., 0.12], [-1., 14., 0.], [-9., 0., 13.]])
small_array= np.array([[5., 3., 0.12], [-1., 14., 0.]])
result = sum([row in small_array for row in big_array])
print(result)
2
Editar (após esclarecimentos):
Uma solução pitônica:
[i for i, brow in enumerate(big_array) for srow in small_array if all(srow == brow)]
Exemplo:
big_array = np.array([[1., 2., 1.2], [5., 3., 0.12], [-1., 14., 0.], [-9., 0., 13.]])
small_array= np.array([[5., 3., 0.12], [-1., 14., 0.]])
result = [i for i, brow in enumerate(big_array) for srow in small_array if all(srow == brow)]
print(result)
[1, 2]
Nota : você provavelmente poderia fazer algo melhor com np.where
, se você tem matrizes enormes, você deve procurar
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
Christopher Nolan uma vez se arrependeu de ter lido o 'roteiro de Pulp Fiction' de Quentin Tarantino