在Python中打印文本之间的矩阵



我在这里看到了一些示例,其中解释了如何将矩阵打印到.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

最新更新