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

本贴最后更新于 486 天前,其中的信息可能已经时移俗易

假设有这样一个需求(不是假设,是真的):
给出历年的预算费用,求增长率。
为方便后续计算,用 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.]])

  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    399 引用 • 557 回帖 • 549 关注
  • numpy
    7 引用
回帖
请输入回帖内容...