如何将Numpy Eig与Pyton Lambda函数一起使用?

2024-09-22 16:40:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我可以将lambda函数与numpy的eig函数一起使用吗

测试问题:

import numpy as np
class c1:
    def __init__(self):
        self.mat1 = lambda num1:np.array([[num1,2],[3,4]])
        self.mat2 = np.array([[1,2],[3,4]])
        self.eigVal, self.eigVec = lambda num1:np.linalg.eig(self.mat2+self.mat1(num1))
    def func1(self):
        print(self.mat1(10))
        print(self.eigVal(10))
c1().func1()       

错误为TypeError: cannot unpack non-iterable function object


Tags: lambda函数selfnumpydefnparrayprint
2条回答

多亏了@pietro。此comment中给出了解决方案

这是我的工作方案

import numpy as np
class c1:
    def __init__(self):
        self.mat1 = lambda num1:np.array([[num1,2],[3,4]])
        self.mat2 = np.array([[1,2],[3,4]])
        self.eigFunc = lambda num1: np.linalg.eig(self.mat2 + self.mat1(num1))
    def func1(self):
        eigval, eigvec = self.eigFunc(10)
        print(eigval)
c1().func1()

该代码将获得每个矩阵的特征值和特征向量:

import numpy as np

class c1:
    def __init__(self):
        self.mat1 = np.array([[11,21],[31,41]])
        self.mat2 = np.array([[1,2],[3,4]])
        
        mat1_vals, mat2_vals = list(map(lambda mat: np.linalg.eig(mat), [self.mat1, self.mat2]))
        
        self.eigVal = [mat1_vals[0], mat2_vals[0]]
        self.eigVec = [mat1_vals[1], mat2_vals[1]]
        
        print('Eig Vals: ', self.eigVal)
        print('Eig Vecs:', self.eigVec)

if __name__=='__main__':
    c1()

输出

Eig Vals:  [array([-3.59729717, 55.59729717]), array([-0.37228132,  5.37228132])]
Eig Vecs: [array([[-0.82111408, -0.42601354],
       [ 0.57076411, -0.90471679]]), array([[-0.82456484, -0.41597356],
       [ 0.56576746, -0.90937671]])]


需要注意的是,您必须map某个iterable对象上的lambda函数,然后将map对象转换为iterable以使用它

干杯

相关问题 更多 >