Python中矩阵列替换为乘法逆元时避免取整的问题
解决NumPy矩阵列替换为乘法逆元后取整为0的问题
你的问题出在NumPy数组的数据类型上:原数组是整数类型(默认int32/int64),当你把浮点型的乘法逆元赋值给整数数组时,NumPy会自动截断小数部分,只保留整数,所以所有逆元都被取整为0。
解决方法
只需要把数组转换为浮点类型,再执行替换操作即可,有两种方式:
方式1:创建数组时直接指定浮点类型
import numpy as np matriz_atributos_max = np.array([ [1500,12,64,24], [1800,12,128,18], [5000,20,128,10], ], dtype=np.float64) # 指定为浮点类型 matriz_atributos_max_nova = matriz_atributos_max.copy() matriz_atributos_max_nova[:,0] = 1 / matriz_atributos_max[:,0] print(matriz_atributos_max_nova)
方式2:将已有的整数数组转换为浮点类型
如果已经创建了整数数组,先转换类型再复制操作:
import numpy as np matriz_atributos_max = np.array([ [1500,12,64,24], [1800,12,128,18], [5000,20,128,10], ]) # 转换为浮点类型并复制 matriz_atributos_max_nova = matriz_atributos_max.astype(np.float64).copy() matriz_atributos_max_nova[:,0] = 1 / matriz_atributos_max[:,0] print(matriz_atributos_max_nova)
输出结果
执行后会得到你需要的保留小数的数组:
array([[6.66666667e-04, 1.20000000e+01, 6.40000000e+01, 2.40000000e+01], [5.55555556e-04, 1.20000000e+01, 1.28000000e+02, 1.80000000e+01], [2.00000000e-04, 2.00000000e+01, 1.28000000e+02, 1.00000000e+01]])
如果需要保留指定小数位数,可以用np.round():
matriz_atributos_max_nova[:,0] = np.round(1 / matriz_atributos_max[:,0], 6)
内容的提问来源于stack exchange,提问作者Priscila
相关产品推荐
相关产品推荐

