python问题解决:TypeError: ufunc 'add' output (typecode 'O') could not be coerced to provided output para

前言

本文旨在解决Python运行时出现的这样的报错:
TypeError: ufunc ‘add’ output (typecode ‘O’) could not be coerced to provided output parameter (typecode ‘d’) according to the casting rule ‘‘same_kind’’

1 问题描述

这个错误是怎么产生的呢?
就是在对numpy的dnarray数组使用运算符+=的时候(比如y+=c),如果数组复杂到一定程度,这样的自加运算就会报如上的错。

2 解决方案

百度上基本找不到什么有用的方案,所以这里才简单记录到这个博客,以免后来者走弯路。

实际上,我发现英语还是太重要了,得扎实学,不然错误都不知道是什么。

2.1 首先基本理解错误的意思

ufunc是什么?
python科学计算之numpy——ufunc函数 https://blog.csdn.net/unixtch/article/details/78531585
这里介绍的还是很清楚的。

在这里插入图片描述

'add' output 这里指的自然就是+=的输出了

typecode 'O' 这里表示自加的输出类型是‘O’,我感觉是object类型

could not be coerced to provided output parameter (typecode 'd') 不能强制从’Object’类型转换成‘dnarray’类型。

2.2 找资料

这里写得挺好的,还是比较靠谱的(因为来源于numpy的github网站中的issue,非常给力)

在这里插入图片描述

从这里就可以明白,numpy是因为你在用+=运算的时候,认为你的操作不安全,转换类型不一样,所以报错。

你要想继续运行,就得改用:
np.add(a, b, out=a, casting="unsafe")
这样的形式。(实际上,我把自加y+=c换成y=y+c 或者y=np.add(y, c)都可以,都不会报错。)

其问题描述:
在这里插入图片描述

对应给出的答案:
在这里插入图片描述

故在此算是解决问题了。供参考。

小结

此外,还参考了:

总言之,解决问题是费时间的,如果再熟练英语一点,可能会更快些。因为我感觉python这种编程语言,如果出错了,英文文献才是第一手资料,中文很多翻译过来的存在一定的失真(不准确性)和滞后,而这种失真和滞后性往往又是不可避免的。

所以可以说是很扎心了。

  • 64
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值