2017-01-01 12 views
0

私はすでに単一のチャネルイメージであるshape(1、224、224)の配列を持っています。私はそれを(1、1、224、224)に変更したいと思います。範囲外の軸1 [0、1):私は、私はいつもこの はIndexErrorを取得別の1次元配列の中にnumpyの多次元配列を挿入

newarr.shape 
#(1,224,224) 
arr = np.array([]) 
np.append(arr, newarr, 1) 

をしようとしています。軸を0として取り除くと、配列は平坦化されます。私は間違って何をしていますか?

+0

「newarr [np.newaxis] '? – Divakar

答えて

1

ディメンションの次元は任意です。したがって、単純に配列の形状を変更するように思えます。これは、によって達成することができる:

newarr.shape = (1, 1, 244, 244) 

又は

newarr = newarr[None] 
+0

'.shape'への明示的な割り当てはとてもいいですが、私はこの機能を認識していませんでした。これは明らかに一般的な形状変更(reshaping)として使用することができる。 'newarr.shape =(2、2、56、224)'を返し、要素の数が保存されていなければ、 'ValueError'を送出します。 –

+0

'newarr = newarr [:, ...]'トリックは 'newarr'に全く影響を与えていないようです。 –

+0

@jmd_dkうわー、私は ':'の代わりに 'None'を書いています。問題は修正されました。はい、これを使用して配列の全体のサイズを変更することはできません。 – Daniel

0

唯一の方法は、より高い次元の配列にinsertを行うことの標的配列を作る、すなわち

bigger_arr = np.zeros((1, 1, 224, 224)) 
bigger_arr[0,...] = arr 

あります正しいサイズを割り当て、値を割り当てます。

np.appendはブービートラップです。避けてください。

時には、これを考えるのに便利な方法です。しかし、これをより簡単に、より速く、reshapeの問題として考えることができます。

bigger_arr = arr.reshape(1,1,224,224) 
bigger_arr = arr[np.newaxis,...] 
arr.shape = (1,1,224,224) # a picky inplace change 
bigger_arr = np.expand_dims(arr, 0) 

この最後のものは、プログラムの寸法に対処する方法のアイデアを提供します

a.reshape(shape[:axis] + (1,) + a.shape[axis:]) 

を行います。