Python整数与浮点乘法错误:numpy数组运算输出全为0/1问题
问题根因
该输出结果的核心触发逻辑为NumPy的类型继承与隐式转换规则:
- 构建
cm0时,传入的a、b、c为纯整数列表,因此np.array([a,b,c])会自动推断为整型数组,数据类型为int。 - 调用
np.empty_like(cm0)创建cm1时,会完全继承源数组的形状与数据类型,生成同维度的整型空数组。 - 循环向整型数组写入带小数的运算结果时,NumPy会自动将浮点数向零取整为整数:例如运算得到的1.62、0.56等值,截断后仅保留整数部分,最终输出全为0、1的整数矩阵。
修复方案
- 方案1:创建
cm1时手动指定浮点类型,覆盖默认的类型继承逻辑
将原代码中cm1 = np.empty_like(cm0)替换为:cm1 = np.empty_like(cm0, dtype=np.float64)
修改后向数组赋值时,浮点数会被正常保留,不会出现截断问题。 - 方案2:移除双层循环与手动初始化空数组的冗余逻辑,利用NumPy广播机制完成运算
删除原代码中的双层循环和cm1初始化语句,替换为向量化运算代码:cm1 = cr[:, np.newaxis] * cm0 * cr[np.newaxis, :]
由于cr本身为浮点类型数组,逐元素运算的结果会自动匹配浮点数据类型,运算效率远高于双层Python循环。
内容的提问来源于stack exchange,提问作者user3015347
相关产品推荐
相关产品推荐

