You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 11:53:19