Python实现numpy矩阵浮点型格式化及解决float()转换TypeError问题
报错原因
Python内置的float()方法仅支持转换单个数值标量,无法直接作用于包含多元素的numpy数组,因此调用float(C)会触发TypeError: only size-1 arrays can be converted to Python scalars报错。
解决方案
你需要的两个需求可通过以下方式实现:
- 批量转换数组元素为浮点型:使用numpy自带的
astype()方法完成整组类型转换,可根据精度要求选择np.float32(单精度)或np.float64(双精度) - 控制浮点数输出保留三位小数:通过
np.set_printoptions配置numpy打印规则,即可让0.2这类数值输出为0.200格式,匹配Matlab的输出精度表现
额外提示:你当前代码中
*是逐元素乘法,如果你需要做矩阵乘法,需要替换为@运算符。你代码中的B为单位矩阵,逐元素相乘的计算结果与原矩阵A完全一致。
完整可运行代码
import numpy as np # 配置浮点数打印保留3位小数 np.set_printoptions(formatter={'float': '{:0.3f}'.format}) A=np.array([[ 0.0186428, -0.0056, -0.0056, 0, 0, 0], [-.1263, 0.42087542, -.1263, 0, 0, 0], [-.1263, -.1263, 0.42087542, 0, 0, 0], [0, 0, 0, 0.2, -0, 0 ], [ 0, 0, 0, -0, 0.2, 0 ], [-0, -0, 0, 0, 0, 0.2 ]]) B=np.array([[1,0,0,0,0,0],[0,1,0,0,0,0],[0,0,1,0,0,0],[0,0,0,1,0,0],[0,0,0,0,1,0], [0,0,0,0,0,1]]) # 逐元素相乘后转换为双精度浮点型 C = (B * A * B).astype(np.float64) print(C)
运行后输出的所有浮点数都会保留三位小数,且不存在类型转换报错。
内容的提问来源于stack exchange,提问作者msci
相关产品推荐
相关产品推荐

