如何在Python中实现文本与多矩阵混合写入TXT文件
问题描述
我查了不少Python将矩阵写入.txt文件的示例,但没找到简便方法实现需求:把多个矩阵和额外文本混合写入.txt文件(这些文本不是表头,所以用DataFrame方案不适用)。
假设我有以下矩阵:
import numpy as np 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自带的np.savetxt()方法,配合打开的文件句柄,就能在写完标题后直接写入矩阵内容,不用手动遍历每行。
基础实现代码
import numpy as np M1 = np.zeros((6, 6)) M2 = np.zeros((6, 6)) M3 = np.zeros((6, 6)) with open("example.txt", "w") as f: # 写入矩阵1的标题和内容 f.write("------- MATRIX 1 ------------------------------------------------------------\n") np.savetxt(f, M1, fmt="%d", delimiter=" ") # 写入矩阵2的标题和内容,前面加换行分隔 f.write("\n------- MATRIX 2 ------------------------------------------------------------\n") np.savetxt(f, M2, fmt="%d", delimiter=" ") # 写入矩阵3的标题和内容,前面加换行分隔 f.write("\n------- MATRIX 3 ------------------------------------------------------------\n") np.savetxt(f, M3, fmt="%d", delimiter=" ")
关键参数说明
fmt="%d":指定矩阵元素以整数格式输出,匹配示例里的0;如果是浮点数,可改为fmt="%.2f"来控制小数位数。delimiter=" ":用四个空格分隔元素,和期望的格式一致。- 每个矩阵标题前加
\n,避免和上一个矩阵的最后一行连在一起。
批量矩阵简化写法
如果矩阵数量多,把标题和矩阵打包成列表,用循环简化代码,后续加新矩阵直接在列表里追加即可:
import numpy as np # 把标题和对应的矩阵配对 matrix_list = [ ("------- MATRIX 1 ------------------------------------------------------------", np.zeros((6, 6))), ("------- MATRIX 2 ------------------------------------------------------------", np.zeros((6, 6))), ("------- MATRIX 3 ------------------------------------------------------------", np.zeros((6, 6))), ] with open("example.txt", "w") as f: for idx, (title, mat) in enumerate(matrix_list): if idx != 0: f.write("\n") # 除第一个矩阵外,前面加换行分隔 f.write(f"{title}\n") np.savetxt(f, mat, fmt="%d", delimiter=" ")
内容的提问来源于stack exchange,提问作者Marc Schwambach
相关产品推荐
相关产品推荐

