2015-07-20 35 views
0

我試圖將一個100x100x100的整數數組保存爲一個文件,並將其保存爲標題的日期和時間。它不需要是人類可讀的(除了時間標題頭),所以我打算使用numpy.save(),一次只取一個片並將其保存到文件中,但這不會附加到文件的結尾,每次覆蓋文件只會包含最後一個片段。如何將3D numpy數組添加到文件?

有沒有像save()或savetxt()附加到文件,而不是覆蓋?

注意:如果它更容易,我可以把日期/時間放到文件名中,而不是保存到標題中嗎?

我當前的嘗試看起來是這樣的:

with open("outfile.txt",'w') as mfile: 
    mfile.write(strftime("%x %X\n")) 
for i in range(len(x)): 
    np.savetxt("outfile.txt",x[i]) 
+1

能不能請你告訴你用它來保存數據的代碼?謝謝! 'numpy.save'以一個文件作爲第一個參數,是否用'a''標誌打開? – galath

+0

好吧,我已經完成了,它現在保存所有的切片,但是我不能使用np.save(),如果我想把日期/時間作爲文件中的標題,因爲它混淆了np.load()函數時我想把它讀回來。 – FJC

+0

啊哈!如果我先用readline()讀入頭文件,然後使用np.load(),但現在load()似乎只拾取一個片段,可以解決如何做到這一點......它可以處理3D數據還是可以處理必須閱讀每個切片,然後堆疊它們? – FJC

回答

1

使用'a'標誌追加到一個文件。 numpy.savetxt將一個數組結構作爲輸入,所以我們需要重新構造它。

p,q,r = x.shape 
with open("outfile.txt",'ab') as mfile: 
    header = strftime("%x %X\n") 
    np.savetxt(mfile, x.reshape(p*q*r), header=header) 
+0

我想你想讓'for'塊更深入地縮進。 – Christoph

+0

呃,當我寫我的評論時沒有看到 – Christoph

0

隨着@ galath的建議的幫助下(儘管實際上它似乎並不重要,如果我用「a」或「W」標誌現在......),我已經想通了,使用NP下面的方法.save /負載和具有日期作爲標題:

outfile="out.npy" 

with open(outfile,'w') as mfile: 
    mfile.write(strftime("%x %X\n"))  #write date and time as header 
    for i in range(len(x)): 
     np.save(mfile,x[i])    #save each slice 

readx=np.zeros((len(x),len(y),len(z)) #empty array to be filled from file  

with open(outfile,'r') as mf:    #reopen file (for reading in) 
    dt=mf.readline()      #read date/time header 
    for i in range(len(x)): 
     readx[i,:,:]=np.load(mf)   #read in each slice and save it to array 

如果任何人有一個更好的解決方案隨時分享,但這樣做什麼,我需要現在。

1

我醬菜的粉絲:)

import cPickle 
import time 
import numpy as np 

arr = np.array(xrange(100)).reshape(10,10) 

#write pickle file 
with open('out.p', 'wb') as f: 
    t = time.asctime() 
    cPickle.dump(t, f, cPickle.HIGHEST_PROTOCOL) 
    cPickle.dump(arr, f, cPickle.HIGHEST_PROTOCOL) 

#read pickle file 
with open('out.p', 'rb') as f: 
    t = cPickle.load(f) 
    arr = cPickle.load(f) 
+0

爲您節省了複雜的讀/寫語句的麻煩...... – Aaron

相關問題