2017-03-10 14 views
0

A [N] [100] [100] [3]に格納された100x100のN色(RGB)画像があるとします。 ので:Numpyベクトル化多次元関数(ニューラルネットワークの特徴平面を構築する)

Channel 0 = R 
Channel 1 = G 
Channel 2 = B 

numpyのを使用して、いくつかの他のチャンネルを構築するための最も効率的な方法は何ですか?例えば、の定義でき:すなわち

Channel 3 = R + G * 0.5 
Channel 4 = If B > 128 Then 1 Else 0 
Channel 5 = If R == 100 Then 1 Else 0 
Channel 6 = If (R + G) > B Then 1 Else 0 

、我々は、画素毎に上記の規則を使用して構築された余分な4つのチャンネルを[N] [100] [100] [7]を取得したいと思います。

このような操作をnumpyでベクトル化する一般的な方法はないようですが、ここでは簡単な方法が必要です。さらに、Nが大きい場合(> 10000)、最も速い方法は何でしょうか?

答えて

0

比較的ストレートフォワードな方法は、例えば、ある:

rgb = np.random.random((1,2,2,3)) 
r,g,b = np.transpose(rgb, (3,0,1,2)) 
np.r_["-1, 4, 0", rgb, r+g*0.5, b>128, r==100, (r+g)>b] 
# array([[[[ 0.64715017, 0.45204962, 0.28497451, 0.87317498, 0.  , 0.  , 1.  ], 
#   [ 0.51238478, 0.62095329, 0.9339249 , 0.82286142, 0.  , 0.  , 1.  ]], 

#  [[ 0.29647208, 0.81635033, 0.76079918, 0.70464724, 0.  , 0.  , 1.  ], 
#   [ 0.3307639 , 0.1878836 , 0.04642399, 0.4247057 , 0.  , 0.  , 1.  ]]]]) 

r_連結演算子は、3-INT-文字列が最初の引数として渡される場合、それが連結軸、深さを意味し、ビット不可解ですアンパッドされたディメンションの位置を調整します。

中間体を事前に割り当てて計算することで、ピークメモリを少し節約できます。

スピードに敏感上記のものより明らかな改善はありません。

関連する問題