jak znaleźć indeksy tablicy numpy 2d występującej w innej tablicy 2d [duplikat]

Nov 25 2020

Mam dwie tablice numpy 2d i chcę znaleźć, gdzie jedna tablica występuje w innej:

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.]])

Następnie chcę uzyskać indeksy wierszy, big_arrayktórych są takie same, jak w przypadku wszystkich wierszy small_array. Chcę zrobić coś podobnego np.in1ddo tablic 2D. To znaczy chcę mieć:

result= [1, 3]

Próbowałem już poniższego kodu, ale się nie udało:

result=[([any(i == big_array ) for i in small_array])]

Z góry doceniam każdą pomoc.

Odpowiedzi

1 Djib2011 Nov 25 2020 at 08:56

Chcesz:

sum([row in small_array for row in big_array])

Przykład:

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


Edycja (po wyjaśnieniach):

Rozwiązanie pytoniczne:

[i for i, brow in enumerate(big_array) for srow in small_array if all(srow == brow)]

Przykład:

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]

Uwaga : prawdopodobnie mógłbyś zrobić coś lepszego np.where, jeśli masz ogromne tablice, powinieneś to sprawdzić