使用numpy保存/加载具有不同列长度的表格
一些背景信息:我正在写一段代码,用来把我绘制的数据保存到一个文本文件里。这些数据应该以一种可以通过脚本重新加载的方式存储,这样就可以再次显示出来(但这次不需要进行任何计算)。最初的想法是把数据存储成列的格式,比如 x1,y1,x2,y2,x3,y3……
我使用的代码可以简化成这样(顺便说一下,我不确定用列表来组合我的数组是否是最有效的方法):
import numpy as np
MatrixResults = []
x1 = np.array([1,2,3,4,5,6])
y1 = np.array([7,8,9,10,11,12])
x2 = np.array([0,1,2,3])
y2 = np.array([0,1,4,9])
MatrixResults.append(x1)
MatrixResults.append(y1)
MatrixResults.append(x2)
MatrixResults.append(y2)
MatrixResults = np.array(MatrixResults)
TextFile = open('/Users/UserName/Desktop/Datalog.txt',"w")
np.savetxt(TextFile, np.transpose(MatrixResults))
TextFile.close()
不过,这段代码在任何数据集长度不同时会出错。阅读了一些类似的问题:
不过,这需要打破原来的格式(要么把数组展平,要么给较短的列添加一些填充字符串来填补较短的数组)
我的问题总结如下:
1) 有没有什么方法可以在转置数组的同时,把它们单独保存为连续的列?
2) 或者有没有办法在文本文件中追加列(给定要跳过的行和列的数量)?
3) 我是否应该尝试用其他库,比如pandas?
非常感谢任何建议。
编辑 1:
经过进一步查找,似乎留空白比填充列表要低效得多。
最后我写了自己的方法(不确定numpy是否有这个功能),我用“nan”值来匹配数组的长度。
为了取回数据,我使用genfromtxt方法,然后用这一行:
x = x[~isnan(x)]
来从数组中移除这些单元格。
如果我找到更好的解决方案,我会分享的 :)
1 个回答
0
要保存你的数组,你可以使用 np.savez
,然后用 np.load
来读取它们:
# Write to file
np.savez(filename, matrixResults)
# Read back
matrixResults = np.load(filename + '.npz').items[0][1]
另外,顺便提一下,你应该遵循命名规则,比如只有类的名字是以大写字母开头的。