用对应于另一个二维数组的索引替换二维数组的值
Replace values of 2-D array by indices of corresponding to another 2-D array
我是numpy的新手。我有一个大小为 6 x 2 的数组 A 和一个大小为 4 x 2 的数组 B。结果我想要一个数组 C 填充了 B 的索引 i.
这是输入和输出的示例:
A = [[ 240. 240.][ 0. 480.][ 0. 960.][ 0. 480.][ 0. 720. ][ 0. 480.]]
B = [[ 0. 480.][ 0. 720.][ 0. 960.][ 240. 240.]]
C = [3, 0, 2, 0, 1, 0]
我尝试使用 np.searchsorted() 但只接受一维数组
我没有找到如何做到这一点的方法。请给我建议。谢谢。
假设一定要匹配,可以使用:
np.isclose(abs(B-A[:, None]), 0).all(2).argmax(1)
输出:
array([3, 0, 2, 0, 1, 0])
工作原理
这会计算 element-wise A 和 B 之间的绝对差值,然后转换为布尔值以识别接近 0 的值。如果全部为 True,我们将 argmax
的索引识别为 True > False
中间体
abs(B-A[:, None])
array([[[240., 240.],
[240., 480.],
[240., 720.],
[ 0., 0.]],
[[ 0., 0.],
[ 0., 240.],
[ 0., 480.],
[240., 240.]],
[[ 0., 480.],
[ 0., 240.],
[ 0., 0.],
[240., 720.]],
[[ 0., 0.],
[ 0., 240.],
[ 0., 480.],
[240., 240.]],
[[ 0., 240.],
[ 0., 0.],
[ 0., 240.],
[240., 480.]],
[[ 0., 0.],
[ 0., 240.],
[ 0., 480.],
[240., 240.]]])
np.isclose(abs(B-A[:, None]), 0)
array([[[False, False],
[False, False],
[False, False],
[ True, True]],
[[ True, True],
[ True, False],
[ True, False],
[False, False]],
[[ True, False],
[ True, False],
[ True, True],
[False, False]],
[[ True, True],
[ True, False],
[ True, False],
[False, False]],
[[ True, False],
[ True, True],
[ True, False],
[False, False]],
[[ True, True],
[ True, False],
[ True, False],
[False, False]]])
np.isclose(abs(B-A[:, None]), 0).all(2)
array([[False, False, False, True],
[ True, False, False, False],
[False, False, True, False],
[ True, False, False, False],
[False, True, False, False],
[ True, False, False, False]])
我是numpy的新手。我有一个大小为 6 x 2 的数组 A 和一个大小为 4 x 2 的数组 B。结果我想要一个数组 C 填充了 B 的索引 i.
这是输入和输出的示例:
A = [[ 240. 240.][ 0. 480.][ 0. 960.][ 0. 480.][ 0. 720. ][ 0. 480.]]
B = [[ 0. 480.][ 0. 720.][ 0. 960.][ 240. 240.]]
C = [3, 0, 2, 0, 1, 0]
我尝试使用 np.searchsorted() 但只接受一维数组 我没有找到如何做到这一点的方法。请给我建议。谢谢。
假设一定要匹配,可以使用:
np.isclose(abs(B-A[:, None]), 0).all(2).argmax(1)
输出:
array([3, 0, 2, 0, 1, 0])
工作原理
这会计算 element-wise A 和 B 之间的绝对差值,然后转换为布尔值以识别接近 0 的值。如果全部为 True,我们将 argmax
的索引识别为 True > False
中间体
abs(B-A[:, None])
array([[[240., 240.],
[240., 480.],
[240., 720.],
[ 0., 0.]],
[[ 0., 0.],
[ 0., 240.],
[ 0., 480.],
[240., 240.]],
[[ 0., 480.],
[ 0., 240.],
[ 0., 0.],
[240., 720.]],
[[ 0., 0.],
[ 0., 240.],
[ 0., 480.],
[240., 240.]],
[[ 0., 240.],
[ 0., 0.],
[ 0., 240.],
[240., 480.]],
[[ 0., 0.],
[ 0., 240.],
[ 0., 480.],
[240., 240.]]])
np.isclose(abs(B-A[:, None]), 0)
array([[[False, False],
[False, False],
[False, False],
[ True, True]],
[[ True, True],
[ True, False],
[ True, False],
[False, False]],
[[ True, False],
[ True, False],
[ True, True],
[False, False]],
[[ True, True],
[ True, False],
[ True, False],
[False, False]],
[[ True, False],
[ True, True],
[ True, False],
[False, False]],
[[ True, True],
[ True, False],
[ True, False],
[False, False]]])
np.isclose(abs(B-A[:, None]), 0).all(2)
array([[False, False, False, True],
[ True, False, False, False],
[False, False, True, False],
[ True, False, False, False],
[False, True, False, False],
[ True, False, False, False]])