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

Python 3.8矩阵求-1次幂时零位置生成inf如何直接返回0

问题描述

在Python中定义如下对角矩阵:

[[1134.01    0.  ]
 [   0.   1134.01]]

使用mat**-1、pow(mat, -1)两种写法对矩阵求-1次幂时,原矩阵0值位置会返回inf,得到结果如下:

[[0.00088183        inf]
 [       inf 0.00088183]]

运行时触发除零警告:

RuntimeWarning: divide by zero encountered in reciprocal

需要排除「手动将结果中inf替换为0」「给原始矩阵添加极小值」两种方案,找到计算时不生成inf、直接在0对应位置返回0的实现方法。

解决方案

首先要明确核心问题:对numpy数组使用**-1或原生pow是逐元素取倒数操作,并非线性代数定义的矩阵求逆,0元素会直接执行1/0运算,自然会生成inf。根据你的实际需求选对应方法即可,两种方法都不会产生inf,也不需要事后修正值:

  • 如果你的需求是逐元素求倒数,原矩阵0值对应结果为0
    用np.where做条件分支计算,仅对非零元素执行倒数运算,从根源避免除零操作:
    import numpy as np
    mat = np.array([[1134.01, 0.], [0., 1134.01]])
    res = np.where(mat == 0, 0, 1 / mat)
    
    运行不会触发除零警告,0值位置直接返回0,非零值正常计算倒数。
  • 如果你的需求是计算线性代数意义上的矩阵逆
    不要用逐元素运算的写法,直接调用numpy线性代数模块的求逆接口即可。对角矩阵的逆矩阵非对角元本身就是0,计算过程不会出现除零问题:
    import numpy as np
    mat = np.array([[1134.01, 0.], [0., 1134.01]])
    res = np.linalg.inv(mat)
    
    计算得到的结果为[[0.00088183, 0.], [0., 0.00088183]],完全符合矩阵逆的数学定义,无inf值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:27:25