Python: 将大矩阵存储到文本文件以备后用
根据你的经验,存储一个二维数组到文本文件的最佳方法是什么?我的矩阵很大,但我们先用一个小的3 x 3矩阵作为例子。可以这样把它存储到.txt文件里:
3 7 5
2 9 8
8 0 1
在同一行的元素之间用空格隔开,而不同的行之间用换行符来分隔。如果你想在另一个Python文件中使用这个保存的矩阵,只需按照相应的方式解析它即可。
不过,有没有更好的方法呢?比如说,能用更少的代码行来存储和读取一个大矩阵?
[编辑]:对了,现在我有一个列表的列表(或者说是数组的数组),但如果使用numpy能让事情变得更简单,我也是愿意尝试的。
4 个回答
0
我个人会使用joblib来存储数组的二进制表示。它还允许使用一个compress
参数来减小文件大小。
from joblib import dump
dump(arr, filename, compress=3)
1
如果你在使用 numpy,那么在它的文档中有一些关于输入输出的功能可以帮助你,具体可以查看 io类别下的几个例程。下面是其中一个例子的代码:
>>> """ Assuming your matrix is called x """
>>> from tempfile import TemporaryFile
>>> outfile = TemporaryFile()
>>> np.save(outfile, x)
要重新加载这个,你需要用到 load 函数:
>>> x2 = np.load(outfile)
然后你的数组应该被复制到 x2 里。
下面是一个例子,展示如何从一个二维的 Python 数组创建一个 numpy 数组:
x = np.array([2, 3, 1, 0])
如果你需要更多帮助,可以留言哦。
1
你可以使用csv模块来实现这个功能:
import csv
l = [[3,7,5],
[2,9,8],
[8,0,1]]
with open('matrix.txt', 'wb') as csvfile:
matrixwriter = csv.writer(csvfile, delimiter=' ')
for row in l:
matrixwriter.writerow(row)
l2 = []
with open('matrix.txt', 'rb') as csvfile:
matrixreader = csv.reader(csvfile, delimiter=' ')
for row in matrixreader:
l2.append(row)
print(l2)
1
如果你有一个简单的数组里面又包含数组,有一个方法是把它存成json格式,使用 json.dump(open('file.dat', 'w'))
来保存,使用 json.load(open('file.dat'))
来加载。这种方法有好有坏。(它容易读懂,但效率不是最高的。)
如果可以使用numpy,那就应该用它。因为numpy在存储、表示和处理大数组方面要高效得多。