2016-08-01 75 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