使用numpy保存/加载具有不同列长度的表格

0 投票
1 回答
1008 浏览
提问于 2025-04-27 13:25

一些背景信息:我正在写一段代码,用来把我绘制的数据保存到一个文本文件里。这些数据应该以一种可以通过脚本重新加载的方式存储,这样就可以再次显示出来(但这次不需要进行任何计算)。最初的想法是把数据存储成列的格式,比如 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()

不过,这段代码在任何数据集长度不同时会出错。阅读了一些类似的问题:

numpy.savetxt能否用于维度大于2的n维数组?

列长度不同的表格

不过,这需要打破原来的格式(要么把数组展平,要么给较短的列添加一些填充字符串来填补较短的数组)

我的问题总结如下:

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]

另外,顺便提一下,你应该遵循命名规则,比如只有类的名字是以大写字母开头的。

撰写回答