掩码为相同形状的数组

问题描述 投票:0回答:1

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
python numpy
1个回答
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]])
© www.soinside.com 2019 - 2024. All rights reserved.