我正在尝试将2个ndarrays
和一个int
的元组列表保存到.csv
文件中并从其中加载。
在当前的实现中,当我保存并加载列表l时,恢复的列表中存在一些错误,顺序为10^-10
。有没有一种方法可以更精确地保存和恢复值?一般而言,我也希望对我的代码发表评论。谢谢!
这就是我现在拥有的:
def save_l(l,path):
tup=()
for X in l:
u=X[0].reshape(784*9)
v=X[2]*np.ones(1)
w=np.concatenate((u,X[1],v))
tup+=(w,)
L=np.row_stack(tup)
df=pd.DataFrame(L)
df.to_csv(path)
def load_l(path):
df=pd.read_csv(path)
L=df.values
l=[]
for v in L:
tup=()
for i in range(784):
tup+=(v[9*i+1:9*(i+1)+1],)
T=np.row_stack(tup)
Q=v[9*784+1:10*784+1]
i=v[7841]
l.append((T,Q,i))
return(l)
答案 0 :(得分:0)
您可能遇到的问题是由于在保存和加载期间缺少.csv文件保护。
使用上下文管理器是一种确保文件被锁定直到完全保存/加载所有数据的好方法。这样,万一系统由于任何原因停止执行,您就不会丢失任何数据,因为所有结果都会在可用时立即保存。
我建议使用with
-statement,其主要用途是对内部使用的对象(在本例中为.csv)进行异常安全清除。换句话说,使用确保文件已关闭,释放了锁,恢复了上下文等。
with open("myfile.csv", "a") as reference: # Drop to csv w/ context manager
df.to_csv(reference, sep = ",", index = False) # Same goes for read_csv
# As soon as you are here, reference is closed
如果您尝试此操作仍然看到错误,则不是由于保存/加载问题引起的。