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

例外にあるように、配列で max を定義することはあいまいです。次の配列がある場合: [6, 2][5, 1]出力は になるはずです[6, 2]が、次の例がある場合: [6, 2][7, 1]出力はどうなるでしょうか。

実際、ここには非常に多くの異なる max 定義があります。配列をベクトルと見なす場合、max はそれらの大きさ、または最大 x 座標を持つベクトルなどになります。Max は、リスト内の配列の長さを比較して、ほとんどの要素を持つものを返すこともできます。同点の場合は、同じ長さの最初のもの。

私の提案は、配列構造を抽象化するクラスを作成し、そこで最大操作を定義して、期待どおりの結果を得ることです。

于 2012-11-05T07:17:41.230 に答える
1

idx と一緒に max 配列を使用するために、これは私が現在使用しているものです。

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 に答える