numpy矩阵打印与保存时每行被拆分的问题求助
问题原因及解决办法
这个问题其实是numpy默认的打印格式设置导致的,和终端、编辑器完全无关。
具体原因
当你用str(row)把numpy矩阵的行转换成字符串时,numpy内部会按照默认的打印选项生成字符串——其中有一个linewidth参数,它控制了每行输出的最大字符数。默认情况下这个值通常在75左右,而你的矩阵每行包含多个长格式的科学计数法数字,拼接起来的字符串长度远远超过了这个阈值,所以numpy自动把每行拆分成了多行来显示。
你可以通过运行下面的代码查看当前的打印选项:
import numpy as np print(np.get_printoptions())
输出里的linewidth就是当前的行宽上限。
解决办法
有两种简单的方式可以解决这个问题:
1. 全局修改numpy的打印选项
在代码开头设置一个足够大的linewidth,这样后续所有的打印和字符串转换都会遵循这个设置:
import numpy as np # 设置行宽为200(可以根据你的矩阵长度调整更大的值) np.set_printoptions(linewidth=200) M = np.matrix([[-4.41991030e-05,-9.27712599e-04,3.75797779e-04,4.11804326e-04,1.08815444e-04], [-3.58432112e-04,-6.11583291e-04,1.18565910e-03,4.10337098e-04,9.96854953e-05], [-1.36865905e-03,1.19013259e-03,1.62785645e-03,1.85052363e-04,6.73256050e-05], [-0.00292639,-0.0084904,-0.00337932,-0.00014984,0.0001385]]) # 现在打印矩阵不会自动换行了 print(M) # 写入文件也会保持单行 with open('file.txt', 'w') as f: for row in M: f.write(str(row)) f.write('\n')
2. 单独处理每行的字符串转换
如果你不想全局修改打印选项,可以在写入文件时,用np.array2string()单独指定行宽:
import numpy as np M = np.matrix([[-4.41991030e-05,-9.27712599e-04,3.75797779e-04,4.11804326e-04,1.08815444e-04], [-3.58432112e-04,-6.11583291e-04,1.18565910e-03,4.10337098e-04,9.96854953e-05], [-1.36865905e-03,1.19013259e-03,1.62785645e-03,1.85052363e-04,6.73256050e-05], [-0.00292639,-0.0084904,-0.00337932,-0.00014984,0.0001385]]) with open('file.txt', 'w') as f: for row in M: # 单独设置该行的输出行宽 f.write(np.array2string(row, linewidth=200)) f.write('\n')
调整linewidth的值时,只要确保它大于你矩阵行转换成字符串后的总长度,就能避免自动换行的问题了。
内容的提问来源于stack exchange,提问作者singrium
相关产品推荐
相关产品推荐

