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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 23:42:29