【问题标题】:Minimum value on a 2d array python二维数组python上的最小值
【发布时间】:2017-06-08 09:11:57
【问题描述】:

我有以下结构的数组,针对这个问题进行了简化:

8 2 3 4 5 6
3 6 6 7 2 6
3 8 5 1 2 9
6 4 2 7 8 3

我希望在这个二维数组中找到最小值但是使用内置的 min 函数会返回一个值错误:

ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()

我已经研究过使用 np.argmin 的替代方案:

https://docs.scipy.org/doc/numpy/reference/generated/numpy.argmin.html

但是,它仅沿单个轴进行评估并沿单个行/列返回最小值的索引,而我希望评估整个数组并返回最小值而不是索引。

如果可以返回数组中最低项的索引值,那么这也是可取的,因为可以很容易地找到最低值。

编辑:感谢np.min 下面的 cmets 是我正在寻找的解决方案,我不知道它存在所以我的答案得到了解决。

【问题讨论】:

  • 你不使用numpy.min吗?
  • 你能告诉我们一些工作代码吗?
  • 考虑到您的数组正确答案将是1 ?
  • 哦,我不知道 np.min 有它自己的变化,这完美地解决了它,谢谢。

标签: python arrays numpy


【解决方案1】:

或者对于非 numpy 解决方案:

>>> a = [[8,2,3,4,5,6],
... [3,6,6,7,2,6],
... [3,8,5,1,2,9],
... [6,4,2,7,8,3]]
>>> mymin = min([min(r) for r in a])
>>> mymin
1

【讨论】:

  • 它确实有效,但它不能回答问题。 OP 没有要求非 numpy 解决方案,因此提供性能较低的解决方案是没有意义的。
  • @ImanolLuengo 实际上,标题和问题对于是否必须使用 numpy 是模棱两可的,唯一的 numpy 引用是链接和标签。因此,这个答案将对不使用 numpy 的用户有所帮助。它被标记为 numpy 的事实并不意味着只提供 numpy 答案。我不希望 OP 接受这个答案,但是我确实希望这个答案将来可以帮助其他用户,这就是这个网站的目的。
  • 公平地说,标题是唯一可能模棱两可的东西。问题中的所有其他内容,从标签到错误,再到文档链接,再到 np.argmin 指向 numpy。是的,我确实同意这个网站是为了帮助他人,但一切都有地方。我可以在这里写一个 numpy 教程,这将使每个读者受益,但不是适合它的地方。
【解决方案2】:

但是它只沿单个轴计算并返回沿单个行/列的最小值的索引,而我希望计算整个数组并返回最小值而不是索引。

numpy.argmin 默认不沿单轴求值,默认沿展平矩阵求值,并返回展平数组中的线性索引;来自您链接的 numpy 文档:

默认情况下,索引在展平数组中,否则沿指定轴。

无论哪种方式,使用numpy.aminnumpy.min 来返回最小值,或者对于数组arrname 使用arrname.min()。正如您所提到的,numpy.argmin 返回最小值的 index(当然,您可以使用此索引通过索引数组来返回最小值)。您还可以使用 arrname.flatten() 展平为一维数组,并将其传递给内置的 min 函数。

以下四种方法产生你想要的。

import numpy as np

values = np.array([
    [8,2,3,4,5,6],
    [3,6,6,7,2,6],
    [3,8,5,1,2,9],
    [6,4,2,7,8,3]])

values.min()          # = 1
np.min(values)        # = 1
np.amin(values)       # = 1
min(values.flatten()) # = 1

【讨论】:

  • 你知道最快的方法是什么吗?
  • @Joe np.amin(arr)np.min(arr)arr.min() 应该都是等效的,并且可能比内置的 min() 更快。
【解决方案3】:

您可以使用np.min()

>>> arr = np.array([[8,2,3,4,5,6],
                    [3,6,6,7,2,6],
                    [3,8,5,1,2,9],
                    [6,4,2,7,8,3]])

>>> arr.min()
1

【讨论】:

  • 1) numpy 已经有一个 np.min,它比 python 的 min 快​​几个数量级,并且 2) 根本不需要重塑。如果你使用 numpy
猜你喜欢
  • 2020-06-20
  • 1970-01-01
  • 2016-06-21
  • 1970-01-01
  • 2017-03-16
  • 1970-01-01
  • 2017-09-28
  • 2015-04-06
  • 1970-01-01
相关资源
最近更新 更多