Это можно сделать с помощью bincount
:
In [11]: bins = np.bincount(a[:, 0, 1])
In [22]: a[bins[a[:, 0, 1]] > 1]
Out[22]:
array([[[ 2, 6, 3]],
[[ 1, 6, 9]],
[[ 4, 3, 10]],
[[ 3, 3, 8]]])
Можно также использовать панд для этого:
In [21]: pd.DataFrame(a[:, 0, :]).groupby(1)[0].transform('size')
Out[11]:
0 1
1 2
2 2
3 2
4 2
Name: 0, dtype: int64
In [22]: pd.DataFrame(a[:, 0, :]).groupby(1)[0].transform('size') > 1
Out[22]:
0 False
1 True
2 True
3 True
4 True
Name: 0, dtype: bool
In [23]: a[pd.DataFrame(a[:, 0, :]).groupby(1)[0].transform('size') > 1]
Out[23]:
array([[[ 2, 6, 3]],
[[ 1, 6, 9]],
[[ 4, 3, 10]],
[[ 3, 3, 8]]])
Обратите внимание, если максимальный размер целых очень большой, np.bincount будет неэффективным. Также может быть способ использовать np.unique с return_counts для этого:
In [31]: nums, counts = np.unique(a[:, 0, 1], return_counts=True)
In [32]: a[counts[np.searchsorted(nums, a[:, 0, 1])] > 1]
Out[32]:
array([[[ 2, 6, 3]],
[[ 1, 6, 9]],
[[ 4, 3, 10]],
[[ 3, 3, 8]]])