python - 根据二维数组中尺寸不匹配的最接近值定位 numpy 索引

标签 python numpy

**原始版本中存在错误。现在数组的维数不相等。 这是一个愚蠢的问题,但我找不到正确的答案。 如何索引 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/

相关文章:

python - Flask 和 nginx 服务器中的错误处理程序

python - NumPy:为什么 np.linalg.eig 和 np.linalg.svd 给出不同的 SVD V 值?

python - 向 numpy 数组添加索引

python - 从 0 到 99 的 Numpy 随机数组,包括两者

python - 使用 Python 转换 OpenCV triangulatePoints 输出以用于 perspectiveTransform

python - 根据域对大电子邮件文件进行排序显示错误

python - 测量外部程序的用户+系统运行时间

python - 如何使用 Python 在指定的 delims 之后查找和替换/删除文本?

python - 我是否需要将 dist 文件夹提交到 git 以便能够使用 git 中的 pip 安装软件包?

numpy 改变元素匹配条件