我在这里看到了一些示例,其中解释了如何将矩阵打印到.txt文件。但是,我还没有找到一种简单的方法来执行我想要做的事情,即打印几个以.txt格式编写的矩阵,其中还打印了附加文本。注意,这个文本不是一个头或其他东西,因此使用数据框架的解决方案并不适合。
假设我有以下矩阵:
M1 = np.zeros((6, 6))
M2 = np.zeros((6, 6))
M3 = np.zeros((6, 6))
我想打印矩阵相对于最上面的行
with open("example.txt", "w") as f:
f.write("------- MATRIX 1 ------------------------------------------------------------n")
f.write("------- MATRIX 2 ---------------------------------------------------------n")
f.write("------- MATRIX 3 ---------------------------------------------------------n")
我期望的结果将是一个类似于这样的。txt文件:
------- MATRIX 1 ------------------------------------------------------------
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
------- MATRIX 2 ------------------------------------------------------------
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
------- MATRIX 3 ------------------------------------------------------------
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
在这种情况下使用numpy.savetxt
是合适的选择;特定的参数允许设置格式,头和注释:
with open('test.txt', "w") as f:
np.savetxt(f, M1, fmt='%d', delimiter=' ', comments='', header="------- MATRIX 1 ------------------------------------------------------------n")
np.savetxt(f, M2, fmt='%d', delimiter=' ', comments='', header="------- MATRIX 2 ------------------------------------------------------------n")
np.savetxt(f, M3, fmt='%d', delimiter=' ', comments='', header="------- MATRIX 3 ------------------------------------------------------------n")
如果你真的只想打印那3行,你可以使用这个。分隔符是您可以用于间距的,默认为一个空格,这里我使用3来匹配您正在寻找的内容。
对于一些可以用于格式化的参数,请在这里检查。
import numpy as np
M1 = np.zeros((6, 6))
M2 = np.zeros((6, 6))
M3 = np.zeros((6, 6))
with open("C:/temp/test.txt", "w") as f:
f.write("------- MATRIX 1 ------------------------------------------------------------n")
np.savetxt(f, M1, fmt='%g', delimiter=' ')
f.write("n------- MATRIX 2 ------------------------------------------------------------n")
np.savetxt(f, M2, fmt='%g', delimiter=' ')
f.write("n------- MATRIX 3 ------------------------------------------------------------n")
np.savetxt(f, M3, fmt='%g', delimiter=' ')
这段代码产生了以下内容:
------- MATRIX 1 ------------------------------------------------------------
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
------- MATRIX 2 ------------------------------------------------------------
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
------- MATRIX 3 ------------------------------------------------------------
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
我对numpy
不太熟悉,不知道内置的解决方法,但是您可以得到这样的输出:
M1 = np.zeros((6, 6))
M2 = np.zeros((6, 6))
M3 = np.zeros((6, 6))
with open('example.txt', 'w') as f:
for idx, matrix in enumerate((M1, M2, M3)):
f.write(f'------- MATRIX {idx+1} ------------------------------------------------------------n')
for matrix_row in matrix:
row =' '.join(str(i) for i in matrix_row) + 'n'
f.write(row)
输出:
------- MATRIX 1 ------------------------------------------------------------
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
------- MATRIX 2 ------------------------------------------------------------
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
------- MATRIX 3 ------------------------------------------------------------
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
*如果获得0
而不是0.0
很重要,可以在这里转换为str
之前将值转换为int
:
row =' '.join(str(int(i)) for i in matrix_row) + 'n'
OR在numpy数组中定义值类型:
M1 = np.zeros((6, 6), dtype=int)
M2 = np.zeros((6, 6), dtype=int)
M3 = np.zeros((6, 6), dtype=int)
:
------- MATRIX 1 ------------------------------------------------------------
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
------- MATRIX 2 ------------------------------------------------------------
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
------- MATRIX 3 ------------------------------------------------------------
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0