3

同じサイズの複数のリスト (または numpy 配列) があり、各ポイントで最大値を持つ同じサイズの配列を返したいと考えています。

例えば、

A = [[0,1,0,0,3,0],[1,0,0,2,0,3]]
B = [[1,0,0,0,0,4],[0,5,6,0,1,1]]
C = numpy.zeros_like(A)
for i in xrange(len(A)):
    for j in xrange(len(A[0])):
        C[i][j] = max(A[i][j],B[i][j])

結果はC=[[1,1,0,0,3,4],[1,5,6,2,1,3]]

これは正常に機能しますが、特に私が持っている配列のサイズと比較する必要がある配列の数については、あまり効率的ではありません。どうすればこれをより効率的に行うことができますか?

4

4 に答える 4

8

使用numpy.maximum:

numpy.maximum(x1, x2[, out])
配列要素の要素ごとの最大値。

2 つの配列を比較し、要素ごとの最大値を含む新しい配列を返します。比較される要素の 1 つが nan の場合、その要素が返されます。両方の要素が nans の場合、最初の要素が返されます。後者の区別は、実部または虚部の少なくとも 1 つが nan であると定義される複雑な nan にとって重要です。最終的な効果は、ナンが伝播されることです。

于 2012-04-12T18:30:28.760 に答える
5

Numpy ソリューション

>>> [map(max,a,b,c) for a,b,c in zip(A,B,C)]
[[1, 1, 0, 0, 3, 4], [1, 5, 6, 2, 1, 3]]
>>> 
于 2012-04-12T18:55:09.527 に答える
4

2つ以上の配列を比較する必要がある場合は、次のことができます

from numpy import random, dstack

A = random.random((2,5))
B = random.random((2,5))
C = random.random((2,5))

stacked_arrays = dstack((A,B,C))
max_of_stack = stacked_arrays.max(2)

dstackは、2D 配列を 2D 配列の 3D スタックに変換します

の括弧内の 2は、私たちのために作成しmaxた新しい軸である 3 番目の軸に沿って最大の操作を実行します。dstack

これは、同じサイズの任意の数の 2D 配列にスケーリングされます

于 2014-04-03T19:29:35.247 に答える
0

何かのようなもの:

numpy_arrays = [A, B, C]

result = [max(elem) for elem in zip(*numpy_arrays)]

?

于 2012-04-12T18:31:21.847 に答える