Array2 [:,0]包含array1行索引,array2 [:,1]包含array1元素值。我想以矢量化的方式获得与array1相同的蒙版。
array1=
[[0 1 2]
[3 4 5]
[6 7 8]]
array2=
[[0 1]
[1 3]
[1 5]
[2 7]
[2 9]]
代码:
array1 = np.arange(9).reshape(-1,3)
array2 = np.arange(10).reshape(-1,2)
array2[:,0]=[0,1,1,2,2]
print(array1[array2[:, 0]] == array2[:, 1,None])
我得到的结果
[[False True False]
[ True False False]
[False False True]
[False True False]
[False False False]]
我想要得到的结果:
[[False True False]
[ True False True]
[False True False]
编辑: 循环解决方案如下所示:
mask=np.zeros_like(array1)
for (y,x) in array2:
mask[y,(np.where(array1[y,:] == x))] = True
答案 0 :(得分:2)
您可以执行向后映射:
array1 = np.arange(9).reshape(-1,3)
array2 = np.arange(10).reshape(-1,2)
array2[:,0] = [0,1,1,2,2]
xs, ys = np.where(array1[array2[:, 0]] == array2[:, 1,None])
mask = np.zeros_like(array1, dtype=bool)
mask[array2[xs,0], ys] = True
这为我们提供了给定的样本数据:
>>> mask
array([[False, True, False],
[ True, False, True],
[False, True, False]])