当前位置: 首页 > news >正文

使用 np.zeros_like(label) 保存预测概率时发现数据类型不匹配导致的隐式类型转换

🍉 CSDN 叶庭云https://yetingyun.blog.csdn.net/


下面这段代码中 predictions 数组在赋值后全为 0 的根本原因是数据类型不匹配导致的隐式类型转换,保存概率值时会被截断为 0 或 1。具体分析如下:

import numpy as npsamples = 100
y = np.random.randint(0, 2, size=samples)
y_pred = np.random.randint(0, 2, size=samples)
y_pred_proba = np.random.rand(samples).astype(np.float32)
print(y, len(y))
print(y_pred, len(y_pred))
print(y_pred_proba, len(y_pred_proba))print("=" * 100)
predictions = np.zeros_like(y_pred)
print(predictions, len(predictions))
predictions[:] = y_pred_proba
print(predictions, len(predictions))

在这里插入图片描述


1. 错误原因分析

  1. 初始化数据类型错误

    • y_prednp.random.randint(0, 2) 生成的,默认数据类型为 int

    • np.zeros_like(y_pred) 会继承 y_predint 类型,因此 predictions 是整型数组。

  2. 浮点数到整型的强制转换

    • y_pred_probanp.random.rand 生成的浮点数组(float32)。

    • 当执行 predictions[:] = y_pred_proba 时,右侧的浮点数会被强制转换为左侧的整型,导致小数部分被截断。例如,0.95 -> 00.19 -> 0

    • 最终,所有 y_pred_proba 中的浮点值都会变成 0,导致 predictions 全为 0。


2. 修正方法

核心思路:确保 predictions 的数据类型与 y_pred_proba 兼容(即浮点类型)。

2.1 高效且精确的修正代码
# 修正后的关键行:显式指定浮点类型
predictions = np.zeros_like(y_pred, dtype=np.float32)  # 强制为浮点类型
predictions[:] = y_pred_proba
2.2 修正原理
  1. 显式指定数据类型

    • np.zeros_like(y_pred, dtype=np.float32) 会创建一个与 y_pred 形状相同但数据类型为 float32 的数组。

    • 此时 predictions 可以正确存储浮点数值,避免类型转换。

  2. 赋值操作保留精度

    • 右侧的 y_pred_probafloat32)可以直接赋值给左侧的浮点数组,无精度损失。

3. 完整修正代码

import numpy as npsamples = 100
y = np.random.randint(0, 2, size=samples)
y_pred = np.random.randint(0, 2, size=samples)
y_pred_proba = np.random.rand(samples).astype(np.float32)
print(y, len(y))
print(y_pred, len(y_pred))
print(y_pred_proba, len(y_pred_proba))print("=" * 100)
predictions = np.zeros_like(y_pred)
print(predictions, len(predictions))
predictions[:] = y_pred_proba
print(predictions, len(predictions))
predictions = np.zeros_like(y_pred, dtype=np.float32)
predictions[:] = y_pred_proba
print(predictions, len(predictions))

4. 其他可行方案

  1. 直接使用浮点初始化
predictions = np.zeros(samples, dtype=np.float32)
  1. 复用 y_pred_proba 的数据类型
predictions = np.zeros_like(y_pred_proba)

5. 总结

  • 根本原因:整型数组无法存储浮点数值,这会引起隐式类型转换。

  • 修正关键:确保目标数组的数据类型与源数据相匹配(浮点数类型:np.float32、np.float64)。


相关文章:

  • 局域网视频会议软件BeeWorks Meet
  • 软考高项(信息系统项目管理师)第 4 版全章节核心考点解析(力扬老师课程精华版)
  • MES系列-ISO95 IEC/ISO 62264
  • 推荐系统中 Label 回收机制之【时间窗口设计】
  • Agent开源工具:mcp快速接入,mcp-use上手指南
  • 极客天成参与”AI助力智慧城市构建”主题演讲暨招商引智专题推介活动
  • 哈希表笔记(一 )
  • 使用C# ASP.NET创建一个可以由服务端推送信息至客户端的WEB应用(一)
  • 简单音频比较
  • 信息科技伦理与道德3-4:面临挑战
  • 前端与后端开发详解:从概念到就业技能指南
  • 【零基础】Ubuntu22.04本地部署Dify
  • Nginx 核心功能笔记
  • 案例解析:基于量子计算的分子对接-QDOCK(Quantum Docking)
  • 告别碎片化!两大先进分块技术如何提升RAG的语义连贯性?
  • ImageDataGenerator ()用法简介
  • 排序算法详解笔记(二)
  • 测试——BUG篇
  • C++算法(17):reverse函数用法详解,头文件<algorithm>与实战示例
  • Linux基础篇、第一章_01_2安装虚拟机手动安装Rocky Linux 9.5
  • 陈文清:推进扫黑除恶常态化走深走实,有力回应人民群众对安居乐业的新期待
  • 华夏银行一季度营收降逾17%、净利降逾14%,公允价值变动损失逾24亿
  • 中国空间站首批在轨繁育果蝇即将返回地球,有望获得多项科学成果
  • 新质观察|重塑低空经济的系统安全观
  • 北京朝阳涉住宅组团地块126亿元成交
  • 幸福航空五一前三天航班取消:客服称目前是锁舱状态,无法确认何时恢复