Python 从两个nump.nd数组中选择行,并为缺少的匹配项插入0

Python 从两个nump.nd数组中选择行,并为缺少的匹配项插入0,python,arrays,numpy,Python,Arrays,Numpy,我有两个名为“a”和“b”的nd.numpy数组,我只想根据与“a”的比较从数组“b”中选择某些行,如果找不到匹配项,则为这些行插入0。我做了第一部分。eg a = np.array([[1,5,9], [2,6,10], [5,14,10]]) b = np.array([[ 1,0,9], [2,6,10], [4,6,10]]) 输出 [[ 1 0 9] [ 2 6 10]

我有两个名为“a”和“b”的nd.numpy数组,我只想根据与“a”的比较从数组“b”中选择某些行,如果找不到匹配项,则为这些行插入0。我做了第一部分。eg

a = np.array([[1,5,9],
           [2,6,10],
           [5,14,10]])

b = np.array([[ 1,0,9],
              [2,6,10],
              [4,6,10]])   
输出

[[ 1  0  9]
 [ 2  6 10]]
预期产量

[[ 1  0  9]
 [ 2  6 10]
 [ 0  0  0]]
代码:


在上面数组“a”的示例中,在第“3”行中,数组“b”中没有值“5”,因此在比较“a”和“b”时,如果未找到匹配项,我希望将“0”插入第三行,以便两个数组的维数相等

如果希望
b[:,0]
中不在
a[:,0]
中的任何元素为零,可以执行以下操作:

>>> b[~np.in1d(b[:, 0], a[:, 0]), :] = 0
>>> b
array([[ 1,  0,  9],
       [ 2,  6, 10],
       [ 0,  0,  0]])

如果希望
b[:,0]
中不在
a
对应行中的任何元素为零:

>>> b[~np.any(b[:, 0][:,None]==a, axis=1), :] = 0
>>> b
array([[ 1,  0,  9],
       [ 2,  6, 10],
       [ 0,  0,  0]])

我不理解您的匹配标准:
[1,5,9]
行也不匹配(
b
[1,0,9]
);为什么会包括这一列?例如,在我的通缉名单中,我检索a[[1]、[2]、[5]]的第一列的值,并与第一列b[[1]、[2]、[4]]进行比较,对于值“1”和“2”,有一个匹配项,因此在y中检索这些值,而在第3行中没有匹配项,因此我想插入数组“b”的“0”第3行
>>> b[~np.any(b[:, 0][:,None]==a, axis=1), :] = 0
>>> b
array([[ 1,  0,  9],
       [ 2,  6, 10],
       [ 0,  0,  0]])