2016-12-22 20 views
0

私はshape =(365,28,36)で3次元配列を持ちます。私は、このアレイを、365個の2次元アレイ(28,36)が互いに積み重ねられた3dアレイとして考える。私は今この3dアレイをループしたい、そして、各2Dスライスは8回繰り返され、次に互いに積み重ねられなければならない。これは、私が1つのサイズの配列(2920,28,36)で終わることを意味します。 2920は365 * 8に由来します。3次元配列をループし、2回スライスをN回追加します

これまでの試みはこれでしたが、動作しません。誰もこの問題を助けることができますか? Pythonで

l = [] 
for i in range(365): 
    for j in range(28): 
     for k in range(30): 
      l.extend(repeat(a[i,j,k], 8)) 
+1

あなたが話している3D配列のデータサンプルを共有できますか? –

+0

はい。ファイルI cal aはここで見つけることができます。 https://1drv.ms/f/s!AlJG9g1WlnmlhDC1WfgR1ljtI67E –

+0

「動作しません」は問題の仕様ではありません。 StackOverflowへようこそ。ヘルプドキュメントの投稿ガイドラインを読み、それに従ってください。 [最小、完全で検証可能な例](http://stackoverflow.com/help/mcve)がここに適用されます。 MCVEコードを投稿して問題を正確に記述するまでは、効果的にお手伝いすることはできません。 – Prune

答えて

1
newarray = [] 
for arr2d in oldarray: 
    for _ in range(8): 
     newarray.append(arr2d) 

配列はそうあなただけのこの操作を行うことができます 、彼らは可変長である意味、実際にリストされています。 oldarrayはあなたの古い3d配列、newarrayは あなたの望ましい出力です、そしてarr2dはoldarrayの中の2d配列です。

+0

ありがとうございます。それが私の問題を解決した –

0

コードにはいくつかの構文エラーがあります。また、2Dスライスへの8つのポインタではなく、8つの独立した2Dデータのコピーが必要であると思われます(1つの値を変更した場合は、すべて変更します)。

これを試してみてください:最終印刷物に

from copy import deepcopy 

a = [ 
    [[1, 2, 3], ['a', 'b', 'c']], 
    [[4, 5, 6], ['@', '#', '$']], 
    [[7, 8, 9], ['X', 'Y', 'Z']] 
    ] 

l = [] 
for slice in a: 
    l.extend([deepcopy(slice) for _ in range(8)]) 

l[0][0][0] = "FLAG" 
print l 

、文字列「FLAG」にどのように一箇所だけの変更ではなく、変更、そのスライスのすべての8つのコピーを注意してください。

関連する問題