2015-07-20 92 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