Python: 将大矩阵存储到文本文件以备后用

4 投票
4 回答
4529 浏览
提问于 2025-04-17 23:29

根据你的经验,存储一个二维数组到文本文件的最佳方法是什么?我的矩阵很大,但我们先用一个小的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在存储、表示和处理大数组方面要高效得多。

撰写回答