python :invalid value encountered in true_divide。(除法遇到无效值)

博客围绕根据历年预算费用求增长率的需求展开,采用matrix矩阵实现计算时会报错。针对此问题给出两种解决方法,一是忽略警告,二是结合预算实际情况,即过去为0表示无此项,现在为0表示无需此项进行具体分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

假设有这样一个需求(不是假设,是真的):
给出历年的预算费用,求增长率。
为方便后续计算,用matrix矩阵实现。

# 历史数据
his=matrix([[30000., 20000., 10000.,  1000.],
        [    0.,     0.,     0.,  9000.],
        [    0.,     0., 10000.,     0.],
        [    0., 10000., 10000.,  1000.],
        [    0.,     0.,     0.,  9000.]])
# 假装是现在的数据
cur=his*1.24
rate = (cur-his)/his*100

不出意外,这个代码会报:
RuntimeWarning: invalid value encountered in true_divide
“”"Entry point for launching an IPython kernel.

遇到问题解决问题,解决方法有很多。
法1:
忽略warn

np.seterr(divide='ignore',invalid='ignore')

法2:
具体问题具体分析,这里是预算。没有倒贴钱的情况,过去为0的意思是过去没有这项,现在为0是现在不需要了。

cur[cur==0]=nan

结果:

(cur-his)/his*100
matrix([[24., 24., 24., 24.],
        [nan, nan, nan, 24.],
        [nan, nan, 24., nan],
        [nan, 24., 24., 24.],
        [nan, nan, nan, 24.]])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值