2016-08-01 132 views
2

我需要在for循環中每次創建一個新的數據集變量 使用下面的.append不會工作。注意每個numpy的陣列型可變的形狀爲(56,25000)爲每個循環創建新的numpy陣列數據集

ps=[1,2,3,4] 

for subj in ps: 

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

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

所以基本上我需要她MYDATA的4個實例,每個的形狀(56,25000),或者,對於每個環路中的新創建數據集變量,例如mydata1,...,mydata4 ....但是.append不會這樣做。我能做到這一點與

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

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

等,但我遠遠PS的多個實例,所以將它

得益於很好的循環!

+0

你不應該」分配給'append'。這就是'mydata.append(np.genfromtext(datapath,mydatafile))'? –

+1

你可以用@jedwards回答,或者如果你需要numpy索引,你可以很容易地初始化一個空的numpy數組,並在每次迭代時填充它。獲取空間:'data = numpy.empty(4,56,25000)',然後在每個循環中'data [i-1] = np.genfromtext(datapath,mydatafile)'。請注意,您必須事先知道該方法的數據集長度和數據集數量。 – Bort

回答

2

很難沒有更多的代碼來表示,但一般.append是一種方法,而應該叫這樣的:

some_container.append(your_object) 

注意我也初始化mydata是一個空列表 - 你不T顯示你如何初始化(如果你有的話),所以要知道:

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

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

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

然後,mydata將numpy的陣列的4元Python列表。

還有numpy的vstack()concatenate()功能,這可能是值得期待的。

最後,只是想指出的是,

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

可以寫成(正如我上面做的):

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

而且爲:

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

# or 

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

但是不要在循環中放置numpy堆棧表達式。收集一個列表並連接一次。 – hpaulj