Usando listas Python:
a = [[0, 1], [3, 4]]
b = [0, 2]
print(b in a)
Estou obtendo False
como saída, mas com matrizes Numpy:
a = np.array([[0, 1], [3, 4]])
b = np.array([0, 2])
print(b in a)
Estou obtendo True
como saída. Qual é o equivalente do in
operador acima para matrizes Numpy 2D?
No caso da matriz NumPy, b em a é interpretado como uma verificação se algum elemento de b está em a, em vez de verificar a presença de b como uma matriz inteira.
Você pode usar a
numpy.all
função junto comnumpy.any
para comparar linhas:Em geral, se você tem um palheiro N-dim e uma agulha (N-1)-dim e quer encontrar todos os locais onde a agulha ocorre no palheiro, você pode comparar com a
==
transmissão da agulha e então reduzir emall
todas as dimensões, exceto na primeira:Se você quiser saber se há alguma correspondência, basta acrescentar
.any()
à expressão acima.Este código deve ser uma solução que funciona de forma semelhante
in
às listas do Python:Alternativamente, você pode substituir
(a == b)
pornumpy.isin(a, b)
.Explicação
A primeira parte,
(a == b)
, retorna esta matriz:O
True
representa a correspondência0
aqui.Quando b é parte de a, o resultado pode parecer com isto:
Então todos os booleanos em uma linha têm que ser
True
.Para verificar isso, chamamos
all(axis=1)
. Isso retorna um booleano para cada coluna.E por fim ligamos
any()
para verificar se há alguma ocorrência.Contagem de ocorrências e localização do índice
Observe que você também pode contar as ocorrências ou encontrar o primeiro índice substituindo
any()
por outras funções.sum()
.argmax()
. Tenha em mente queargmax()
retorna0
se nenhuma ocorrência for encontrada.De acordo com esta resposta , esta seria a melhor opção:
Você pode fazer assim: