矢量化Python中的标量数组乘法(Numpy)

时间:2015-01-16 02:56:54

标签: python-2.7 numpy

我创建了一个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。

1 个答案:

答案 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]形状相同。

这是有效的,因为内部函数在xy中是线性的,eigvals接受(..., M, M) array_like输入。在这种情况下,其输入将为(n,m,M,M)形状。