2016-05-12 15 views
2

私はサイズ3600 * 7200のnumpy 2D配列を持っています。私はマスクとして使用したい同じ形状の別の配列を持っています。numpy pythonの条件に基づいて2D配列をサブセット化

import numpy as np 
N = 10 
arr_a = np.random.random((N,N)) 
arr_b = np.random.random((N,N)) 
arr_a[arr_b > 0.0] 

結果の配列が2D、それは1Dで、もはや次のとおりです。

問題は、私はこのような何かをしたときにということではありません。どのようにして2D配列を取得するのですか?

+0

0より大きくない値をどのように埋めたいですか?ナンと?あなたがそれらを埋めるのではないなら、あなたはどんな形を予期していますか?そのうちの1つだけが0より大きい場合はどうなりますか? – ayhan

+0

ありがとうayhan、nanは、充填に使用すると大丈夫でしょう – user308827

答えて

2

あなたは形状を維持するためにnp.whereを使用することができます。

np.where(arr_b > 0.0, arr_a, np.nan) 

arr_bの値が0よりも大きい場合には、それ以外の場合はnp.nan使用する、arr_aから対応する値を取ります。

import numpy as np 
N = 5 
arr_a = np.random.randn(N,N) 
arr_b = np.random.randn(N,N) 
np.where(arr_b > 0.0, arr_a, np.nan) 

Out[107]: 
array([[ 0.5743081 ,   nan, -1.69559034,   nan, 0.4987268 ], 
     [ 0.33038264,   nan, -0.27151598,   nan, -0.73145628], 
     [  nan, 0.46741932, 0.61225086,   nan, 1.08327459], 
     [  nan, -1.20244926, 1.5834266 , -0.04675223, -1.14904974], 
     [  nan, 1.20307104, -0.86777899,   nan,   nan]]) 
関連する問題