根据您的经验,将二维数组存储到文本文件中的最佳方法是什么?我的矩阵非常大,但是我们用一个小的3 × 3矩阵作为例子。可以按照字面意思像这样存储它(存储到.txt文件中):
3 7 5
2 9 8
8 0 1
,在同一行的元素之间使用空格,并使用换行符将行分开。然后,如果你想在不同的python文件中使用这个保存的矩阵,你只需相应地解析。
然而,是否有更好的(例如,需要几行代码的方式)方式来存储和检索一个大矩阵?
[EDIT]:好的,现在我有一个列表的列表(或数组的数组),但我愿意使用numpy的想法,如果这使事情变得容易得多
如果它是一个简单的数组的数组,一个选择是将其存储为json与json.dump(open('file.dat', 'w'))
和json.load(open('file.dat'))
加载它。这有它的优点和缺点(可读,但不是最有效的)
如果使用numpy是一个选项,你应该使用它。它在保存、表示和序列化大型数组方面效率要高得多。
您可以使用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)
如果您正在使用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])
如果你需要进一步的帮助,请留下评论。
我个人会使用joblib来存储数组的二进制表示。它还允许使用compress
参数来减少大小。
from joblib import dump
dump(arr, filename, compress=3)