**原始版本中存在错误。现在数组的维数不相等。 这是一个愚蠢的问题,但我找不到正确的答案。 如何索引 2d numpy 数组中最接近的数字?假设我们有
e = np.array([[1, 2], [4, 5, 6]])
我想找到最接近 2 的值的索引,以便它返回
array([1, 0])
非常感谢!
最佳答案
通常你会使用np.argwhere(e == 2)
:
In [4]: e = np.array([[1,2,3],[4,5,6]])
In [6]: np.argwhere(e == 2)
Out[6]: array([[0, 1]])
如果您确实需要指定的输出,则必须添加额外的 [0]
In [7]: np.argwhere(e == 2)[0]
Out[7]: array([0, 1])
但是,您提供的输入不是标准数值数组,而是 object
数组,因为 len(e[0]) != len(e[1])
:
In [1]: e = np.array([[1,2],[4,5,6]])
In [3]: e
Out[3]: array([list([1, 2]), list([4, 5, 6])], dtype=object)
这使得 numpy 的用处和效率大大降低。你将不得不求助于类似的东西:
In [26]: res = []
...: for i, f in enumerate(e):
...: g = np.array(f)
...: w = np.argwhere(g==2)
...: if len(w):
...: res += [(i, v) for v in w]
...: res = np.array(res)
假设这是一个拼写错误,如果您对最接近 2 的值感兴趣,即使 2 不存在,您也必须执行以下操作:
In [35]: np.unravel_index((np.abs(e - 2.2)).argmin(), e.shape)
Out[35]: (0, 1)
这里我选择 2.2 作为示例值。
关于python - 根据二维数组中尺寸不匹配的最接近值定位 numpy 索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49197409/