Python保存矩阵至文件并保留矩阵结构的实现方案
问题
我希望在Python中将矩阵保存到文件时保留矩阵结构。示例代码如下:
#Program to test the output of an array to a file import numpy as np from mpmath import mp,mpf,matrix # Set precision to 32 digits mp.dps=32 #Define array out=matrix(3,2) for j in range(3): out[j,0]=mpf(j+1)*mpf('1.73') out[j,1]=mp.sin(mpf(j)) filout="test_out.txt" np.savetxt(filout,out,fmt='%32s')
当前得到的输出为:
1.73 0.0 3.46 0.8414709848078965066525023216303 5.19 0.90929742682568169539601986591174
但我期望的输出是:
1.73 0.0 3.46 0.8414709848078965066525023216303 5.19 0.90929742682568169539601986591174
请问如何实现该需求(我已尝试多种方法但均无法保留矩阵结构)?
解决方案
核心问题是numpy.savetxt处理mpmath的matrix对象时,会将其视为一维迭代器,导致每行仅输出单个元素。以下两种方法可解决该问题:
方法1:手动遍历格式化每行
直接操作mpmath矩阵的行,将每行元素格式化后拼接写入文件,无需依赖numpy:
import numpy as np from mpmath import mp,mpf,matrix mp.dps=32 #Define array out=matrix(3,2) for j in range(3): out[j,0]=mpf(j+1)*mpf('1.73') out[j,1]=mp.sin(mpf(j)) filout="test_out.txt" with open(filout, 'w') as f: for row in out: # 对每行每个元素应用32位宽度格式,再用空格连接 formatted_line = ' '.join(f'%32s' % elem for elem in row) f.write(formatted_line + '\n')
方法2:转换为numpy数组后保存
先将mpmath矩阵转换为numpy字符串数组(确保保留高精度),再使用savetxt:
import numpy as np from mpmath import mp,mpf,matrix mp.dps=32 #Define array out=matrix(3,2) for j in range(3): out[j,0]=mpf(j+1)*mpf('1.73') out[j,1]=mp.sin(mpf(j)) filout="test_out.txt" # 转为numpy字符串数组 np_matrix = np.array(out.tolist(), dtype=str) # 按列指定格式保存 np.savetxt(filout, np_matrix, fmt='%32s')
两种方法均能生成你期望的矩阵结构输出,每行包含对应行的所有元素。
内容的提问来源于stack exchange,提问作者user22383881
相关产品推荐
相关产品推荐

