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

使用np.float64时Python内核崩溃,切换为float32正常,求原因

问题原因与解决方案

核心问题:无限递归导致内核崩溃

你定义的round函数存在无限递归的致命问题:

  • 当输入参数x的类型是np.float64时,函数内部调用了round(x),但这里调用的不是Python内置的round,而是你自己定义的这个同名函数
  • 每次调用都会重复进入判断逻辑,不断递归调用自身,瞬间耗尽内存导致内核崩溃

为什么float32时无错误?

当x的dtype是float32时,不满足x.dtype == np.float64的判断条件,函数直接返回x,不会触发递归逻辑,因此不会出现崩溃问题。

修复方案

解决方法很简单,避免递归调用自己的函数,明确指向Python内置的round即可,有两种常见方式:

方式1:重命名自定义函数(推荐)

避免和内置函数重名,从根源上解决冲突:

def custom_round(x):
    if x.dtype == np.float64:
        return round(x)  # 这里调用的是Python内置round
    else:
        return x

方式2:明确调用内置round函数

如果不想改名,可以直接引用内置函数:

def round(x):
    if x.dtype == np.float64:
        return __builtins__.round(x)  # 显式指定调用内置round
    else:
        return x

补充说明

当你在DataFrame上应用这个函数时,pandas会对每个元素执行函数逻辑。对于float64类型的元素,每一次处理都会触发无限递归,栈深度迅速超过上限,最终导致内核崩溃;而float32元素的处理不会进入递归分支,因此流程正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 08:40:34