2017-05-03 5 views
3

n次元配列に対して所定の操作を実行する際に問題があります。具体的には、私は、その次元である5の配列を持っている: 配列の特定の次元で操作を実行します。

In [223]: data.ndim 
Out[223]: 5 

に等しい形状と

:上の操作を実行することができる場合、私は知りたいのですがどのような

In [224]: shape(data) 
Out[224]: (6, 26, 27, 6, 50) 

です他のすべてのディメンション(たとえば、max(data[0,0,0,0,:]))の最後のディメンションですが、forループは使用しません。

私は十分にはっきりしていたと思います!おかげで助けをnumpyの中

答えて

6

out[i,j,k,l] = max(data[i,j,k,l,:])は、多くの場合、それはout2[i,j,k,l,0] = max(data[i,j,k,l,:])として、しかし寸法を維持するために便利です、次

out = np.max(data, axis=-1) 
out = np.max(data, axis=4) 

の一つとして綴らすることができます。あなたは渡すことによってこれを行うことができます:

out2 = np.max(data, axis=-1, keepdims=True) 

のでout2.shape == (6, 26, 27, 6, 1)を - 今では入力に対して正しく放送するので、これは便利です。詳細情報については

summaxが周り

+0

おかげで、両方の薄いラッパーである、ufunc.reduceの引数を見てみましょう!私は軸の機能を認識していましたが、私は他の操作をどのように実行できるのか分かりません。例えば今私が見つけた最大値を分割してデータを正規化したい(まだ5次元を話している)、ループなしで可能なのか? – gian9

+0

これは 'data/np.max(data、axis = -1、keepdims = True)'になります。 – Eric

2

ほとんどの機能は、この目的のためにaxisキーワード引数を取る:

data.max(axis=4) 

これは、第五軸(彼らは0から始まる)を超える最大値を検索します。結果は形状(6, 26, 27, 6)になります。

関連する問題