我创建了一个2D网格网格w = np.meshgrid(x,y)
,我正在尝试将其输入到以下函数中:
def f(w):
eigs = np.linalg.eigvals(A0 + w[0]*A1 + w[1]*A2)
return abs(eigs[0] - eigs[-1])
其中A0,A1,A2是方阵。但我收到一个错误,告诉我操作数不能一起播放。基本上发生的事情是w[0]*A1
没有矢量化,因此w[0]
是网格的整个x值块而不是每个单独的x值,w[1]*A2
同样的事情,但是y值。
我尝试过np.vectorize(func)
,但这不起作用,我得到一个IndexError。
答案 0 :(得分:1)
由于w[0]
是(n,m)
数组,您可以通过
def f(w):
eigs = np.linalg.eigvals(A0+w[0][...,None,None]*A1 +
w[1[...,None,None]*A2)
return abs(eigs[...,0] - eigs[...,-1]
结果与w[0]
形状相同。
这是有效的,因为内部函数在x
和y
中是线性的,eigvals
接受(..., M, M) array_like
输入。在这种情况下,其输入将为(n,m,M,M)
形状。