【问题标题】:finding the minimum value in an array with returned values [duplicate]在具有返回值的数组中找到最小值[重复]
【发布时间】:2021-12-27 12:16:25
【问题描述】:

例如,我有一个数组:

[1 2 3 4 
 2 3 4 0
 5 4 0 6]

我想找到所有值的索引更接近值 3.9(在我的示例中为 4)

我尝试使用:

import numpy as np
def find_nearest(array, value):
    idx = (np.abs(array - value)).argmin()

np.where(array== array.min())

但是没有一个选项可以给我正确的答案。

我确实希望得到:

(3,1),(1,2),(2,1)

在我的原始代码中,我迭代了一个形状为 3648X5472 的数组,因此“FOR”循环可能太重了。

希望能在这里得到帮助,谢谢

【问题讨论】:

  • 你怎么解释(3,1),(1,2),(2,1)?这对我来说没有意义

标签: python arrays numpy 2d numpy-ndarray


【解决方案1】:

你可以使用:

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

v = 3.9

b = abs(a-v)

xs, ys = np.where(b == np.min(b))

输出:

>>> xs
array([0, 1, 2])

>>> ys
array([3, 2, 1])

替代输出:

>>> np.c_[np.where(b == np.min(b))]
array([[0, 3],
       [1, 2],
       [2, 1]])
# or 
>>> np.argwhere(b==np.min(b))

【讨论】:

  • xs,ys = array([0, 1, 2]),array([3, 2, 1])|我除了得到 (3,1),(1,2),(2,1)
  • 你能解释一下这些数字吗?前 4 个值是第 0 行第 3 列,第二个是第 1 行第 2 列,第三个是第 2 行第 1 列。我的输出显示了什么
  • 太好了,替代输出正是我搜索的内容
【解决方案2】:

你已经很接近了。当您找到第一个最接近值的索引时,您可以使用 `np.argwhere:

找到相等值的索引
closest = array[np.abs(array - value).argmin()]
np.argwhere(array == closest)

【讨论】:

    【解决方案3】:

    您可以使用numpy.isclose 并在您的情况下设置值3.90.1 进行如下检查:

    >>> arr = np.array([[1 ,2, 3, 4 ],[2, 3, 4, 0],[5 ,4, 0, 6]])
    >>> val = 3.9
    >>> np.transpose(np.isclose(arr, val, rtol=1e-01).nonzero())
    array([[0, 3],
           [1, 2],
           [2, 1]])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-19
      • 2021-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-14
      • 2013-09-07
      相关资源
      最近更新 更多