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_array
których są takie same, jak w przypadku wszystkich wierszy small_array
. Chcę zrobić coś podobnego np.in1d
do 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ć