別の2D配列で発生する2Dnumpy配列のインデックスを見つける方法[重複]

Nov 25 2020

2つの2dnumpy配列があり、1つの配列が別の配列のどこで発生しているかを調べたいと思います。

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_arraysmall_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


編集(説明後):

pythonicソリューション:

[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、でもっと良いことができるでしょう。巨大な配列がある場合は、それを調べる必要があります。