2017-06-15 5 views
1

Ich versuche herauszufinden, wie Sie 2D-Arrays iterativ anhängen, um eine singuläre größere Array zu generieren. Bei jeder Iteration wird ein 16x200 ndarray gesehen unterhalb generiert:Iterativ Anfügen von NDarray-Arrays mit Numpy in Python

Array to iteratively 'append'

Für jede Iteration eine neue 16x200 Array erzeugt wird, würde ich für insgesamt N Iterationen zu ‚append‘ dies den zuvor erzeugten Array wie . Bei zwei Iterationen würde das erste generierte Array beispielsweise 16x200 sein und bei der zweiten Iteration würde das neu generierte 16x200-Array an das erste generierte Array angehängt, wodurch ein 16x400 großes Array erstellt würde.

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 

Im Fall des oben eingebetteten Code der 4-mal iteriert Schleife, so wird der letzte Zug Array erwartet 16x800 groß zu sein. Jede Hilfe würde sehr geschätzt werden, ich habe ein leeres darüber gezeichnet, wie dies erfolgreich zu erreichen ist. Der folgende Code ist ein allgemeiner Fall:

import numpy as np 

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

Antwort

0

Versuchen numpy mit hstack. Aus der Dokumentation nimmt hstack eine Sequenz von Arrays und stapelt sie horizontal zu einem einzigen Array.

Zum Beispiel:

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 

Gewährt:

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

Während es möglich ist, ein concatenate (oder eines des 'Stapels' Varianten) bei jeder Iteration durchzuführen, ist es im allgemeinen schnellen Sammeln Sie die Arrays in einer Liste und führen Sie die Verkettung einmal durch. Liste append ist einfacher und schneller.

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