二维数组 python 上的最小值

新手上路,请多包涵

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

 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 是我一直在寻找的解决方案,我不知道它存在,所以我的答案已经解决了。

原文由 cd123 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 863
2 个回答

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

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

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

Either way, use numpy.amin or numpy.min to return the minimum value , or equivalently for an array arrname use arrname.min() .正如您提到的, numpy.argmin 返回最小值的 _索引_(当然,您可以使用该索引通过用它索引数组来返回最小值)。您还可以使用 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

原文由 alkasm 发布,翻译遵循 CC BY-SA 3.0 许可协议

或者对于非 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

原文由 Nick stands with Ukraine 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏