2016-11-17 22 views
1

5 numpy配列をshape (5,5)としました。私が達成したいのは、これらの5個の配列をシェイプ(5,5,5)の1つの配列に結合することです。私のコードは次のように見えるが動作しません:numpyスライスを2次元配列に追加して3次元にします

combined = np.empty((0, 5, 5), dtype=np.uint8) 

for idx in range(0, 5): 
    array = getarray(idx) # returns an array of shape (5,5) 
    np.append(combined, img, axis=0) 
私は最終的に形状がされるように、それはこの軸に付加されます0への第一の軸を設定した場合、私は思っ

(5,5,5) 。ここで何が間違っていますか?

答えて

1

私は自分でそれを考え出した:

combined = np.empty((0, 5, 5), dtype=np.uint8) 

for idx in range(0, 5): 
    array = getarray(idx) # returns an array of shape (5,5) 
    array array[np.newaxis, :, :] 
    combined = np.append(combined, img, axis=0) 
print combined.shape + returns (5,5,5) 
1

私が試してみた:リストへの追加

A = np.array([getarray(idx) for idx in range(5)]) 

それとも

alist = [] 
for idx in range(5): 
    alist.append(getarray(idx)) 
A = np.array(alist) 

は、アレイに追加するよりも高速です。あなたが発見したように、後者はまったく新しい配列を作ります。

dynamically append N-dimensional array - 同じ問題ですが、異なる寸法から始まります。

+0

私はすでに私の質問に答えています。でもありがとう。なぜあなたは別の答えを持ってきたのですか?それが良いと思いますか? – thigi

+0

はい、私はより速いと思います。あなたは 'np.append'に固執することができますが、そのコードを見ればそれが何をしているのかを理解することができます。簡単な時間テストを試してみてください。インクリメンタルに配列を構築することは、よくあることです。 – hpaulj

+0

ええ、スピードは必要ありません。私はそれを完了する必要があります。とにかくありがとう! – thigi

関連する問題