2016-08-01 8 views
2

Ich muss eine neue Datensatzvariable jedes Mal innerhalb einer for-Schleife erstellen mit .append als unten funktioniert nicht. Man beachte die Form jeden numpy Arraytyp variabel ist (56, 25000)Erstellen neuer numpy Array-Dataset für jede Schleife

ps=[1,2,3,4] 

for subj in ps: 

    datapath = '/home/subj%d' % (subj) 

    mydata.append = np.genfromtext(datapath, mydatafile) 

so dass im Grunde muß ich sich 4 Instanzen mydata, die jeweils mit einer Form (56, 25000), oder daß für jede Schleife eines neuen Dataset-Variable wird erstellt z. B. mydata1, ..., mydata4 .... aber .append wird es nicht tun. Ich kann dies mit

if ps==1: mydata1 = np.genfromtext(datapath, mydatafile) 

if ps==2: mydata2 = np.genfromtext(datapath, mydatafile) 

etc, aber ich habe viel zu viele Fälle von ps, so würde eine Schleife es

Dank nett!

+0

Sie shouldn‘ t Zuweisung zu 'append'. Dies tut es 'mydata.append (np.genfromtext (Datenpfad, Mydatafile))'? –

+1

Sie können entweder mit @ jedwards Antwort gehen, oder wenn Sie numpy Indizierung benötigen, können Sie einfach ein leeres numpy Array initialisieren und es mit jeder Iteration füllen. Get space: 'data = numpy.empty (4,56,25000)', und dann in jeder Schleife 'data [i-1] = np.genfromtext (Datenpfad, Mydatafile)'. Beachten Sie, dass Sie die Länge der Datensätze und die Anzahl der Datensätze für diese Methode vorher kennen müssen. – Bort

Antwort

2

Es ist schwer, ohne mehr Code zu sagen, aber .append ist im Allgemeinen ein Verfahren und soll wie folgt aufgerufen werden:

some_container.append(your_object) 

Hinweis ich auch mydata bin initialisiert eine leere Liste zu sein - Sie don‘ t zeigt, wie Sie es initialisieren (wenn Sie tun überhaupt), so dass nur darüber im Klaren sein:

mydata = [] 
for subj in [1,2,3,4]: 

    datapath = '/home/subj%d' % (subj) 

    mydata.append(np.genfromtext(datapath, mydatafile)) 

Dann mydata wird eine 4-Element-Python-Liste von numpy Arrays sein.

Es gibt auch numpy vstack() und concatenate() Funktionen, die sich sehen lassen können.

Schließlich wollte nur darauf hinweisen, dass

ps = [1,2,3,4] 
for sub in ps: 
    ... 

kann geschrieben werden (wie ich oben tun):

for sub in [1,2,3,4]: 
    ... 

sondern auch als:

for sub in range(1,5): 
    ... 

# or 

for sub in range(4): 
    datapath = '/home/subj%d' % (subj + 1) 
    ... 
+2

Aber setzen Sie die numpigen Stack-Ausdrücke nicht in die Schleife. Sammeln Sie eine Liste und verketten Sie sie einmal. – hpaulj