2012-08-02 91 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