2012-08-02 955 views
1

我在做什么:生成一系列长的一维数组。Python/numpy追加数组,转置并保存为csv

我想要做什么: append/concatentate/vstack /?这些转换为二维数组,然后将行保存为csv文件中的列。

以下的作品,但它不是优雅:

rlist=[]      # create empty list 
for i in range(nnn)    # nnn is typically 2000 
    (calculate an array "r") 
    rlist.append(r)    # append f.p. array to rlist 
rarr = array(rlist)    # turn it back into array so I can transpose 
numpy.savetxt('test.csv',rarr.T,delimiter=',') # save rows as columns in csv file 

是否有一个更优雅或pythonesque办法做到这一点?

+0

你为什么说这不优雅?当然,你可以使用'numpy.vstack'和一个转置 - 但最后,它将是相同数量的代码行,你可能会在循环的每一次迭代中增长相同的数组(这可能是效率低下),或者等到最后把它们堆叠在一起(这就是你现在正在做的)。我没有看到太大的区别... – mgilson 2012-08-02 12:24:36

回答

1

如果你知道rnnn提前长度,你可以这样做:

rarr = np.zeros((r_len, nnn)) # r_len rows, nnn columns 
for i in range(nnn): 
    rarr[:,i] = r_calc() 
numpy.savetxt('test.csv', rarr, delimiter=',') 

这使数据向量直接进入rarr行,节省了您的转换阵列和调换。

+0

预分配数组是一种很好的方法。我不确定它更优雅,但它可能会更快一点。 – senderle 2012-08-02 13:18:00

0
rarr = np.concatenate([get_array(r) for r in xrange(nnn)]) 
np.savetxt('test.cvs', rarr.T, delimiter=',') 
+0

感谢您的建议。我是一个真正的Python新手,所以我希望我的代码很丑。也许不像我想象的那么糟糕!我会理解这些想法。学习Python的好方法,但是(来自FORTRAN)Python的方法并不总是显而易见的。 – dcnicholls 2012-08-02 14:03:40