如何读取文件导入矩阵?

时间:2013-12-12 01:32:27

标签: python numpy

我需要在Python程序中使用一些矩阵,比如

Q = np.matrix([[1,0,1,1,0],
               [0,2,0,1,1],
               [1,0,2,0,1],
               [1,1,0,1,0],
               [0,1,1,0,1]])

我想从文件中导入矩阵(使用numpy),那么我该怎么做呢?我应该编写什么代码以及我应该使用哪个文件(.txt?)。我对python很新,有谁可以帮助我?提前谢谢。

1 个答案:

答案 0 :(得分:3)

我假设您不仅要导入矩阵,还要首先将它们导出到文件中。

如果这是真的,有多种简单的选择,有不同的权衡。


np.save以二进制格式保存数组,该格式只能由NumPy使用。但它非常快,并且生成相当小的文件。

np.save('matrix.npy', Q)
Q = np.load('matrix.npy')

np.savetxt使用CSV方言(默认情况下使用空格分隔符)将数组保存在文本文件中。它速度较慢,并且会生成更大的文件,但如果您希望能够读取或编辑文件(或通过仅限ASCII的频道发送,例如没有附件的电子邮件),那么这是最佳选择。

np.savetxt('matrix.txt', Q)
Q = np.loadtxt('matrix.txt')

np.savetxt 还可以将数组保存在压缩文本文件中。这为您提供了小文件,但它们的保存和加载速度较慢。它们不是直接人类可读的,但是非常容易解压缩文件,然后你有一个可以读取和编辑的文本文件。所以,有时候这值得做。

np.savetxt('matrix.txt.gz', Q)
Q = np.loadtxt('matrix.txt.gz')

最后,您可以使用标准的Python保存和加载机制,例如pickle

with open('matrix.pickle', 'wb') as f:
    pickle.dump(Q, f)
with open('matrix.pickle', 'rb') as f:
    Q = pickle.load(f)

只有在需要将NumPy数组与非NumPy对象一起存储时,这才真正有用。


如果您必须保存多个矩阵,而不是每个文件保存一个,则可能需要查看savezsavez_compressed。或者,如果您需要多个对象,其中只有一些是NumPy,pickle可能是最佳选择。