2016-04-11 9 views
0

私は3Dのnumpy配列Aの形状10 x 5 x 3を持っています。また、ベクトルBの長さ3(最後の軸の長さはA)です。私はそれぞれA[:,:,i]B[i]とを比較したいと思います。i = 0:2となり、すべての値はA[:,:,i] > B[i]となり、B[i]に置き換えられます。配列内の最大値を置換するPython

forループなしでこれを実現する方法はありますか?

編集:私はあなたがこれを達成するためにnumpy.minimumを使用することができますforループ python replace values in 2d numpy array

+1

あなたはこれまでに何をしようとしたのですか? – Cyrbil

答えて

3

を使用してi = 0:2渡っargmaxを試してみました。 2つの配列の間で要素の最小値を返します。配列が異なる場合(配列の場合など)、配列は比較前に自動的に正しいサイズにブロードキャストされます。

A = numpy.random.rand(1,2,3) 
# array([[[ 0.79188 , 0.32707664, 0.18386629], 
#   [ 0.4139146 , 0.07259663, 0.47604274]]]) 

B = numpy.array([0.1, 0.2, 0.3]) 

C = numpy.minimum(A, B) 
# array([[[ 0.1  , 0.2  , 0.18386629], 
#   [ 0.1  , 0.07259663, 0.3  ]]]) 

それとも、インプレースの交換をしたい場合は@Divakarによって示唆されるように:

numpy.minimum(A, B, out=A) 
+1

またはnumpy.minimum(A、B、out = A)です。 – Divakar

+0

@Divakarそれを指摘してくれてありがとう。私はいつもそのオプションを忘れています! – Suever

関連する問題