跳过numpy.linalg.LinAlg错误:一行中的奇异矩阵

e7arh2l6  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(93)

我有一个字典,它的值是矩阵。我想反转这些矩阵,但其中一些是奇异的,因此我在运行程序时抛出Singular matrix错误。下面是一个最小可重复的例子:

import numpy as np
N = 10

x = np.arange(N)

def matrix(z):
    return np.array([[z*(z+1), z*(z+2)], [(z+2)*(z+3), (z+3)*(z+4)]])
    

example_dict = dict(zip(map(str,x), map(matrix, x)))

{k:np.linalg.inv(v) for k,v in example_dict.items()}

字符串
错误消息为:

raise LinAlgError("Singular matrix")
numpy.linalg.LinAlgError: Singular matrix


有没有一种方法可以在一行代码中纠正这个问题?我可以将代码重写为完整的for循环块并捕获它,但我正在寻找一个更优雅的解决方案。

jyztefdp

jyztefdp1#

如果你说的“优雅”是指解析,那么你想要的特性在十年前就被拒绝了:https://peps.python.org/pep-0463/
你最好的办法是用for循环来完成这个操作,或者把操作 Package 在一个函数中:

def true_inv(v):                                                                                                       
    try:                                                                                                              
        return np.linalg.inv(v)                                                                                       
    except np.linalg.LinAlgError:                                                                                     
        print("Matrix doesn't have inverse. Moving to next...")                                                       
        return None                                                                                       
                                                                                                                      
                                                                                                                      
                                                                                                                      
{k:true_inv(v) for k, v in example_dict.items()}

字符串

相关问题