numpy имеет функцию setdiff1d
, проблема в том, что она разбивает массивы (так что они становятся 1d), и результат также равен 1d.
с помощью крошечного трюка, используя .view
, мы можем заставить numpy думать, что ваши массивы уже 1d, с элементами кортежа, а затем использовать setdiff1d
и изменить его после.
попробуйте это:
import numpy as np
a = np.array([[1, 2],
[3, 4],
[5, 6],
[7, 8],
[9, 10]])
b = np.array([[3, 4],
[5, 6]])
a_rows = a.view([('', a.dtype)] * a.shape[1])
b_rows = b.view([('', b.dtype)] * b.shape[1])
c = np.setdiff1d(a_rows, b_rows).view(a.dtype).reshape(-1, a.shape[1])
print(c)
Выход:
[[ 1 2]
[ 7 8]
[ 9 10]]