基于具有不匹配维度的2D数组中的最接近值定位numpy索引

laximzn5  于 2023-10-19  发布在  其他
关注(0)|答案(3)|浏览(90)

**在原始版本中出现错误。数组的维数现在是不相等的。这是一个愚蠢的问题,但我找不到正确的答案。如何在2d numpy数组中索引最接近的数字?假设我们有

e = np.array([[1, 2], [4, 5, 6]])

我想找到最接近2的值的索引,这样它就返回

array([1, 0])

多谢了!

a11xaf1n

a11xaf1n1#

通常使用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作为示例值。

ctehm74n

ctehm74n2#

这可以通过定义一个在1D数组上工作的函数并将其应用于2D数组的行来完成:

e = np.array([[1,2,3], [4,5,6]])

# function to find position of nearest value in 1D array
def find_nearest(a, val):
    return np.abs(a - val).argmin()

# apply it 
np.apply_along_axis(find_nearest, axis = 1, arr = e, val = 2)
dluptydi

dluptydi3#

虽然这是一个老问题,但对于“矩形”数组,就像其他答案一样,它是一行程序

import numpy as np
e = np.array([[1, 2, 3], [4, 5, 6]])
val = 2.4

nearest = np.unravel_index(np.argmin(np.abs(e - val), axis=None), e.shape)

nearest
(0, 1)

相关问题