gpt4 book ai didi

python - 使用/= 规范化变量会抛出 ufunc 错误

转载 作者:行者123 更新时间:2023-12-05 03:59:23 27 4
gpt4 key购买 nike

我正在慢慢学习一些机器学习,但在一次使用计算机视觉对 kaggle 猫狗数据集进行练习时,发生了一些我不太明白的事情。

然后当我尝试规范化 pickle 中的图像值时,它在编写时起作用

X = X/255.0

但是在我写的时候会抛出一个错误

 X /=255.0

TypeError: ufunc 'true_divide' output (typecode 'd') could not be coerced to provided output parameter (typecode 'B') according to the casting rule ''same_kind''

据我了解,x/= 255.0 应该与 X = X/255.0 相同,所以我哪里出错了?是 float 还是 int ?

非常感谢解释

最佳答案

查看 python 文档中的增强分配:https://docs.python.org/3/reference/simple_stmts.html#index-14

...

扩充赋值计算目标(与普通赋值语句不同,它不能是拆包)和表达式列表,对两个操作数执行特定于赋值类型的二元运算,并将结果赋给原始目标.目标仅被评估一次。

像 x += 1 这样的增强赋值表达式可以重写为 x = x + 1 以实现类似但不完全相等的效果。在增强版本中,x 仅被评估一次。此外,如果可能,实际操作就地执行,这意味着不是创建新对象并将其分配给目标,而是修改旧对象。

与普通赋值不同,扩充赋值先评估左侧,然后再评估右侧。例如,a[i] += f(x) 首先查找 a[i],然后计算 f(x) 并执行加法,最后将结果写回 a[i]。

...

所以你部分正确,这是一个 float vs int 的问题,结合操作是否就地执行。

x/=255.0 不起作用,因为该操作是就地执行的。让我们看看您的错误消息:TypeError: ufunc 'true_divide' 输出(类型代码 'd')无法根据转换规则 ''same_kind'' 强制转换为提供的输出参数(类型代码 'B')

查看下表 ( https://docs.python.org/2/library/array.html ),它引用的类型代码是“int”和“float”。 x/=255.0 尝试将 int (x) 强制转换为 float(x 除以 255.0 的结果)。这是一个不安全的转换,您会收到错误消息。 type code to type conversion chart

但是 x=x/255.0 没问题,因为操作不是就地执行的。在右侧,我们得到 x/255.0 的结果,我们只需将此值分配给 x,就像您将任何 float 分配给任何变量一样。

关于python - 使用/= 规范化变量会抛出 ufunc 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57238798/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com