7

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

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]

我不想将内部数组转换为列表,因为列表的大小非常大。我也有目的地创建这样来执行数组操作。

4

4 回答 4

6

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

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

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

编辑:

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

max(a, key=operator.methodcaller('tolist'))
于 2012-11-05T07:22:32.513 回答
2

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

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

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

于 2012-11-05T07:17:41.230 回答
1

要将最大数组与 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]
于 2012-11-08T09:41:05.990 回答
0
     python 3.2

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

     Its working well
于 2012-11-05T14:35:45.077 回答