これを解決するために、多次元のケースも処理する関数を作成しました。(@ecatmur の回答は 2 次元では完全に機能しますが、1D または 3D+ では失敗します)
import numpy as np
def haselement(arr,subarr):
'''Test if subarr is equal to one of the elements of arr.
This is the equivalent of the "in" operator when using lists instead of arrays.'''
arr = np.asarray(arr)
subarr = np.asarray(subarr)
if subarr.shape!=arr.shape[1:]:
return False
elif arr.ndim<2:
return (subarr==arr).any()
else:
boolArr = (subarr==arr)
boolArr.resize([arr.shape[0],np.prod(arr.shape[1:])])
return boolArr.all(axis=1).any()
tableau = np.array(range(10), dtype = np.uint8)
tableau.shape = (5,2)
haselement(tableau,[0,1])
1D は if ステートメントで処理され、ND は @ecatmur のアルゴリズムが機能するように配列を 2D にサイズ変更して処理されます。これを解決するために私が考えた他の方法は、リストの内包表記またはループを使用することでした (これは実際にはより効率的ですが、リストが長く、要素が先頭に近い場合に限られます)。それでも、これはもっと派手に見えます。
ライブラリから使用したい場合は、ここで関数を見つけることもできます。
https://github.com/davidmashburn/np_utils (明らかな免責事項、私は著者です;))