I took a small sample from your post:
>>> big_array = np.array([[ 1, 0, 0, 0],
[ 1, 10, 20, 30],
[ 2, 7, 0, 0],
[ 2, 3, 4, 5],
[ 2, 56, 57, 89],
[ 1, 78, 27, 64]])
>>> small_array = torch.array([20, 10, 30])
The way I see it, you have a two dimensional array big_array[big_array[:,0]] which you want to compare to scalar values contained in small_array. Comparing an array with a single scalar will return an array of same shape where the conditional will have been called element-wise, leaving you with a boolean mask:
>>> big_array[big_array[:,0]] == small_array[0]
array([[False, False, False, False],
[False, False, False, False],
[False, False, False, False],
[False, False, False, False],
[False, False, False, False],
[False, False, False, False]])
Of course, if you compare to small_array straight away, it will check array-to-array, which will return False and perharps even a DeprecationWarning warning:
>>> big_array[big_array[:,0]] == small_array
False
What you could do though, is broadcast your small_array:
>>> small_array[:, None, None].shape
(10, 1, 1)
This way you can compare the indexed array with your small_array's scalar values:
>>> big_array[big_array[:,0]] == small_array[:, None, None]
array([[[False, False, True, False],
[False, False, True, False],
[False, False, False, False],
[False, False, False, False],
[False, False, False, False],
[False, False, True, False]],
[[False, True, False, False],
[False, True, False, False],
[False, False, False, False],
[False, False, False, False],
[False, False, False, False],
[False, True, False, False]],
[[False, False, False, True],
[False, False, False, True],
[False, False, False, False],
[False, False, False, False],
[False, False, False, False],
[False, False, False, True]]])
Which is the same result as the one yielded by big_array[big_array[:,0]] == small_array[0], big_array[big_array[:,0]] == small_array[1], and big_array[big_array[:,0]] == small_array[2].
big_array, asmall_arrayand the expected output?