Numpy
Учитывая
a = np.arange(12).reshape(3, 2, 2)
lst = [
np.arange(4).reshape(2, 2),
np.arange(4, 8).reshape(2, 2)
]
print(a, *lst, sep='\n{}\n'.format('-' * 20))
[[[ 0 1]
[ 2 3]]
[[ 4 5]
[ 6 7]]
[[ 8 9]
[10 11]]]
--------------------
[[0 1]
[2 3]]
--------------------
[[4 5]
[6 7]]
Обратите внимание, что lst
- это список массивов согласно OP. Я сделаю этот 3d массив b
ниже.
Использовать трансляцию. Использование правил вещания. Я хочу, чтобы размеры a
как (1, 3, 2, 2)
и b
как (2, 1, 2, 2)
.
b = np.array(lst)
x, *y = b.shape
c = np.equal(
a.reshape(1, *a.shape),
np.array(lst).reshape(x, 1, *y)
)
Я буду использовать all
для получения (2, 3)
массива значений истинности и np.where
, чтобы выяснить, какие из подмассивов a
и b
фактически равны.
i, j = np.where(c.all((-2, -1)))
Это всего лишь подтверждение того, что мы достигли того, что хотели. Предполагается, что для каждого парного значения i
и j
подмассивы фактически одинаковы.
for t in zip(i, j):
print(a[t[0]], b[t[1]], sep='\n\n')
print('------')
[[0 1]
[2 3]]
[[0 1]
[2 3]]
------
[[4 5]
[6 7]]
[[4 5]
[6 7]]
------
in
Однако, чтобы завершить размышления ОП по использованию in
a_ = a.tolist()
list(filter(lambda x: x.tolist() in a_, lst))
[array([[0, 1],
[2, 3]]), array([[4, 5],
[6, 7]])]