我是numpy新手。我有一个大小为6 × 2的数组A和一个大小为4 × 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(),但只接受1d数组我没有找到做这件事的方法。请给我一些建议。谢谢你。
假设有必要匹配,您可以使用:
np.isclose(abs(B-A[:, None]), 0).all(2).argmax(1)
输出:
array([3, 0, 2, 0, 1, 0])
工作原理
按元素计算A和B之间的绝对差值,然后转换为布尔值以标识接近0的值。如果全部为True,则将argmax
的索引识别为True>假
中间体
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]])