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
相关产品推荐
相关产品推荐

