2017-12-30 12 views
0

Ich habe ein Python-Array von Form (19, 73984) - das entspricht 19 grau abgeflachten Bildern von 272 x 272px Größe. Ich möchte in der Lage sein, dies zu verarbeiten und es in ein neuronales Feed-Forward-Netzwerk zu speisen, aber ich möchte in der Lage sein, es in Chargen zu füttern. Ich erwarte eine Art von Funktion, die in einer for-Schleife ausgeführt wird. Diese Funktion sollte das Dataset-Array, die Batch-Größe und auch den Indexwert der Iteration erhalten, um zu wissen, wie viele Elemente von welcher Position zurückgegeben werden sollen. ex: def get_batch_data(i, dataset, batch_size):Python 3 Split-Array in Stücke ab einer bestimmten Position

wo i ist es, einen für Schleifeniteration Index, der verwendet wird, um einen Teil der Daten für eine bestimmte Ausgangsposition zurückzubringen, bis die dataset über geschleift wird. Gibt es einen besseren Weg dies zu tun oder können Sie mir dabei helfen? Danke!

+0

Warum die Batch-Datei-Tag? Wenn sich Ihre Daten bereits in einem Python-Array befinden, bleiben Sie einfach in der Python-Umgebung. – jwdonahue

+0

Ich fürchte, ich verstehe nicht, was du implizierst –

+0

Die Frage ist - was einen * nützlichen Brocken * ausmacht ... Es sieht so aus, als hättest du schon ein bequemes Array von 19 Bildern dort. Funktioniert das nicht für Sie/welches Problem versuchen Sie anzugehen? –

Antwort

1

Testdaten:

print(list(itertools.islice(bigArr,5,10)))) # start 5, stop 10, implicit 1 step 

Doku:

bigArr = [[x,x+1,x+2,x+3] for x in range(1,1000,4) ] # 250 subLists 

Easiest wahrscheinlich islice() von itertools wäre islice() die Liste nimmt, ein start Wert, ein stop Wert und ein stepper - und macht was du willst als One-Liner.


Sie auch itertools.compress mit einem Schiebe True Fenster für die Elemente nutzen, könnten Sie wollen:

# only show 5 to 10th (excluded) element: 
varParts = itertools.compress(bigArr, # first list 
      [1 if x in range(5,10) else 0 for x in range(len(bigArr))]) # second list 

# consume iterator: 
print(list(varParts)) 

Compress liefert nur Werte aus der ersten Liste, die auf True in der zweiten Liste zu bewerten - die zweite Liste ist so aufgebaut, dass nur die gesuchten Elemente ausgewertet werden True

Doku: compress


Oder alle von Hand für die große Array wie folgt mit Slicing:

def get_batch_data(i, arr, batchSize): 
    return arr[i:min(len(arr),i+batchSize)] 

Verwendung wie folgt aus:

for i in range(0,len(bigArr),5): 
    print(get_batch_data(i,bigArr,5)) # creates sub-slices - wich take memory 
+0

Super und vollständige Antwort. Danke mein Herr! –

Verwandte Themen