다른 2D 배열에서 발생하는 2D numpy 배열의 인덱스를 찾는 방법 [중복]

Nov 25 2020

두 개의 2d numpy 배열이 있고 한 배열이 다른 배열에서 발생하는 위치를 찾고 싶습니다.

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

그런 다음의 big_array모든 행과 동일한 행의 인덱스를 얻고 싶습니다 small_array. np.in1d2D 배열 과 같은 일 을 하고 싶습니다 . 내 말은 내가 갖고 싶어요 :

result= [1, 3]

이미 다음 코드를 시도했지만 성공하지 못했습니다.

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

미리 도움을 주시면 감사하겠습니다.

답변

1 Djib2011 Nov 25 2020 at 08:56

당신이 원하는 것은 :

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

예:

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


수정 (설명 후) :

파이썬 솔루션 :

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

예:

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]

참고 :을 사용하여 더 나은 작업을 수행 할 수 np.where있습니다. 거대한 배열이 있으면 찾아보아야합니다.