2017-02-10 10 views
0

私は基本的にthisを達成しようとしていますが、別の方法で展開する必要があります。私はN-1th次元のすべてのサンプルを連結したいと思っています。例えば、私のアンフォールディングを(100,100,3)のRGB画像に適用する場合、新しい配列は、基本的には3つのカラーチャンネル画像が新しい配列に並んでいる(100,300)になります。Numpy N次元配列の展開

flattenconcatenateのようなnumpy組み込み関数を使用するためのすべての試みでは結果が得られませんでした。 (flatten、最終目標は、それが1次元配列になるまで展開これを適用することであるため)寸法の開始番号はarray = array[:,...,:,0]+...+array[:,...,:,0](一定でないため、

もループでそれを行うためのスライス方法を考えることはできません)

EDIT

私はちょうど私が欲しいものを達成するためのこの方法を思いついたが、それでも、より良い、より純粋な、numpyソリューションを歓迎します。

shape = numpy.random.randint(100, size=numpy.random.randint(100)) 
array = numpy.random.uniform(size=shape) 

array = array.T 
for i in range(0, len(shape)-1, -1): 
    array = numpy.concatenate(array) 
+0

なぜ 'rgb_image.reshape(100、300)'はジョブを実行しないのですか? – kennytm

+0

前述のとおり、画像の例は*単なる例です*。私は1DアレイにN次元配列を折りたたんで再帰的に – WobbaFetttttt

+1

を折り畳むためにこの動作が必要です。なぜなら、最後の目標は1D配列になるまでこの展開を適用することです - なぜあなたの配列を1Dに直接 'flatten'しないのですか?単一の 'flatten'または' ravel'コールが必要なだけのものでなければなりません。 – user2357112

答えて

0

私は、アレイの最後の2次元を平坦化したいと思っていますか?

In [96]: shape = numpy.random.randint(10, size=numpy.random.randint(10))+1 
In [97]: shape 
Out[97]: array([2, 7, 2]) 
In [98]: newshape=tuple(shape[:-2])+(-1,) 
In [99]: arr = np.arange(np.prod(shape)).reshape(shape) 
In [100]: arr.shape 
Out[100]: (2, 7, 2) 
In [101]: arr.reshape(newshape).shape 
Out[101]: (2, 14) 
In [102]: arr.reshape(newshape) 
Out[102]: 
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], 
     [14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]]) 

あなたが最後の次元での用語の順序が気に入らない場合、あなたはrange(0,len(shape)-1, -1)が空の範囲であるので、私はあなたのコードに対してそれをテストすることはできません

In [109]: np.swapaxes(arr, -1,-2).reshape(newshape) 
Out[109]: 
array([[ 0, 2, 4, 6, 8, 10, 12, 1, 3, 5, 7, 9, 11, 13], 
     [14, 16, 18, 20, 22, 24, 26, 15, 17, 19, 21, 23, 25, 27]]) 

を転置する必要があるかもしれません。

私はあなたが第一の軸上のARRを分割して、最後にそれを結合

In [112]: np.concatenate(arr,axis=-1).shape 
Out[112]: (7, 4) 
In [113]: np.concatenate((arr[0,...],arr[1,...]), axis=-1) 
Out[113]: 
array([[ 0, 1, 14, 15], 
     [ 2, 3, 16, 17], 
     [ 4, 5, 18, 19], 
     [ 6, 7, 20, 21], 
     [ 8, 9, 22, 23], 
     [10, 11, 24, 25], 
     [12, 13, 26, 27]]) 

をしたいとは思いません。

+0

ありがとうございました。私が望んでいたものではありませんでしたが、それは私の探求のヒントです。私の解決策は私が望むものを達成する。私が望むものを達成する1つのnumpy関数はないと思います – WobbaFetttttt

関連する問題