【问题标题】:python max of list of arrays数组列表的python最大值
【发布时间】:2012-10-25 00:30:56
【问题描述】:

我有一个数组列表,例如:

a = [array([6,2]),array([8,3]),array([4,2])]

我尝试了max(a),它返回以下错误:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

我希望它返回一个列表或数组,例如:

In: max(a)
Out: [8,3]

我不想将内部数组转换为列表,因为列表的大小非常大。我还特意创建了这样的对象来执行数组操作。

【问题讨论】:

  • 什么定义了最大的数组?数组的总和?第一个元素?
  • 它可以是数组的总和,也可以是第一个元素,任何东西都对我有用/适用。
  • 我认为如果你改变你原来的问题太多以至于这里的任何答案都变得无关紧要,这对你没有多大帮助。
  • 是的,这是真的。但这就是我现在需要的吗?将修改后的版本作为新问题发布是否更好?
  • 我认为最好采用这里给出的一些答案,并构建自己的解决方案。这本质上是同一个问题,只是多了一层嵌套。

标签: python arrays list max


【解决方案1】:

最简单的方法是转换为元组/列表以便比较(或自己实现比较):

>>> max(a, key=tuple)
array([8, 3])

注意这是内置的max 而不是np.max

编辑:

对于多维数组,使用.tolist方法:

max(a, key=operator.methodcaller('tolist'))

【讨论】:

  • 这行得通,但如果我的列表是这样的,那么它会返回相同的 ValueError,请帮助我! a = [数组([[1,2],[2,2],[3,2]]),数组([[4,3],[4,4],[5,4]])]
  • 我也需要返回索引,请帮帮我!
  • @Alaissham 检查更新的答案。您还可以使用 lambda 作为键:lambda x: x.tolist()
【解决方案2】:

正如它在异常中所说,在数组上定义最大值是模棱两可的。如果我们有以下数组:[6, 2][5, 1],那么我猜输出应该是[6, 2],但是如果我们有以下示例:[6, 2][7, 1] 那么输出必须是什么。

事实上,这里对 max 有很多不同的定义。如果我们将数组作为向量,那么 max 可以是它们的大小,或者具有最大 x 坐标的向量等。 Max 也可以比较列表中数组的长度并返回具有最多元素的数组或在平局的情况下,第一个等长。

我的建议是创建一个类来抽象你的数组结构,并在那里定义你所期望的结果的最大操作。

【讨论】:

  • 我不会得到这种复杂性,至少在我的程序中是这样,因为我的数组就像 [1.112,1.114,1.112],[2,321,2.309,2.317] 并且所有数组都具有相同的长度.
【解决方案3】:

要拥有最大数组和 idx,这就是我现在使用的:

a = [array([6,2]),array([8,3]),array([4,2])]

In: max_a = map(max, a)
Out: max_a = [6,8,4]

In: idx = max_a.index(max(max_a))
Out: idx = 1

In: result = a[idx]
Out: reusult = [8,3]

【讨论】:

    【解决方案4】:
         python 3.2
    
         a=[([6,2]),([8,3]),([4,2])]
         max(a)
    
         Its working well
    

    【讨论】:

    • 您的“答案”质量很差。他们不解释发生了什么,有时不反映 OP 的代码,而且通常不是最好的解决方案。在提出并接受了明显优越的解决方案之后,您将发布它们。请三思而后行。
    • 这很好,但我拥有的是列表中的数组。你能帮我找到最大值的索引吗?
    猜你喜欢
    • 1970-01-01
    • 2021-12-03
    • 2018-09-13
    • 2019-04-04
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    相关资源
    最近更新 更多