【发布时间】:2021-06-22 01:54:49
【问题描述】:
我可以将 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。
【问题讨论】:
-
lambda是一个函数,当你调用它时,会生成一个包含两个数组的数组。你不能直接在课堂上解压,但你可以做类似self.eigFunc = lambda num1: np.linalg.eig(self.mat2 + self.mat1(num1))的事情,然后在以后解压结果eigval, eigvec = self.eigFunc(10) -
有趣的是,answer 说您可以使用 lambda 返回两个值。但在我的例子中,我不能。当我采纳你的建议时,它的工作。谢谢。
-
lambda调用时可以返回 2 个值,但 lambda 本身是一个对象。 -
谢谢,@hpaulj。现在我理解了
lambda的不可迭代结构,因为我从下面的代码中得到了错误。self.eigFunc = lambda num1: np.linalg.eig(self.mat1(num1)); self.eigenVal = lambda num1 : self.eigFunc(num1)