我需要在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很新,有谁可以帮助我?提前谢谢。
答案 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对象一起存储时,这才真正有用。
如果您必须保存多个矩阵,而不是每个文件保存一个,则可能需要查看savez
和savez_compressed
。或者,如果您需要多个对象,其中只有一些是NumPy,pickle
可能是最佳选择。