2017-06-15 9 views
1

私は、二次元配列を繰り返し追加して単一の大きな配列を生成する方法を理解しようとしています。以下に見られるように、各反復で16x200のndarrayが生成されます。新しい16x200配列が生成され、各反復についてPythonでnumpyを使用してndarray配列を反復的に追加する

Array to iteratively 'append'

、I希望N反復の合計これ以前に生成された配列に「追記」に。例えば、2回の反復の場合、最初に生成される配列は16x200であり、2回目の反復では、新たに生成された16x200配列が16x400サイズの配列を作成する最初の配列に追加されます。

train = np.array([]) 
for i in [1, 2, 1, 2]: 
    spike_count = [0, 0, 0, 0] 
    img = cv2.imread("images/" + str(i) + ".png", 0) # Read the associated image to be classified 
    k = np.array(temporallyEncode(img, 200, 4)) 
    # Somehow append k to train on each iteration 

上記の埋め込みコードの場合、ループは4回繰り返されるので、最後のトレイン配列は16x800サイズになると予想されます。どんな助けでも大いに感謝されます、私はこれを成功裏に達成する方法について空白を描きました。以下のコードは一般的な例です:

import numpy as np 

totalArray = np.array([]) 
for i in range(1,3): 
    arrayToAppend = totalArray = np.zeros((4, 200)) 
    # Append arrayToAppend to totalArray somehow 

答えて

0

numpyを使用してください。hstackドキュメントから、hstackは一連の配列をとり、それらを水平に積み重ねて1つの配列を作成します。例えば

import numpy as np 

x = np.zeros((16, 200)) 
y = x.copy() 

for i in xrange(5): 
    y = np.hstack([y, x]) 
    print y.shape 

を与える:

(16, 400) 
(16, 600) 
(16, 800) 
(16, 1000) 
(16, 1200) 
1

を、それが各反復でconcatenate(または「スタック」変異体のいずれか)を行うことが可能であるが、それは一般的に高速であります配列をリストに累積し、連結を1回実行します。リストの追加はより簡単で高速です。

alist = [] 
for i in range(0,3): 
    arrayToAppend = totalArray = np.zeros((4, 200)) 
    alist.append(arrayToAppend) 
arr = np.concatenate(alist, axis=1) # to get (4,600) 
# hstack does the same thing 
# vstack is the same, but with axis=0 # (12,200) 
# stack creates new dimension, # (3,4,200), (4,3,200) etc 
関連する問題