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

Python Numpy如何修改ndarray内部数据类型 解决浮点计算结果为0的问题

问题原因

你的代码里初始化的float类型数组没有生效,因为后续直接给ham_fields变量重新赋值了整数类型的过滤结果:data本身是整数数组,data[data[:, 0] == 0]返回的依然是整数类型,直接赋值后就覆盖了之前初始化的float数组。后续基于整数数组计算得到的ham_sum也是整数类型,给整数数组元素赋值浮点数时,numpy会自动向下截断为整数,因此0.xxx的数值会被转成0。

解决方法

任选以下任意一种方式修改即可:

  • 在过滤data的时候直接转换数据类型为float:
    # 删掉原代码里冗余的ham_fields、ham_total初始化语句,直接写下面的代码
    ham_fields = data[data[:, 0] == 0].astype(float)
    ham_sum = np.delete((ham_fields.sum(0)),0)
    ham_total = np.sum(ham_sum)
    ham_len = len(ham_sum)
    
    for i in range(ham_len):
        ham_sum[i] = (ham_sum[i] + self.alpha) / (ham_total + (ham_len * self.alpha))
    
  • 在生成ham_sum的时候转换数据类型为float:
    ham_fields = data[data[:, 0] == 0]
    ham_sum = np.delete((ham_fields.sum(0)),0).astype(float)
    ham_total = np.sum(ham_sum)
    ham_len = len(ham_sum)
    
    for i in range(ham_len):
        ham_sum[i] = (ham_sum[i] + self.alpha) / (ham_total + (ham_len * self.alpha))
    
额外优化建议

循环赋值的部分可以直接用向量化运算替代,不需要写for循环,运行效率更高:

ham_sum = (ham_sum + self.alpha) / (ham_total + ham_len * self.alpha)

内容的提问来源于stack exchange,提问作者N K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:09:00