添加多个矩阵而不构建新矩阵

Seb*_*ien 2 python numpy matrix

假设我有两个矩阵B,M并且我想执行以下语句:

B += 3*M
Run Code Online (Sandbox Code Playgroud)

我反复执行这个指令,所以我不想每次构建矩阵3*M(3可能会改变,只是为了使我只做一个标量矩阵产品).它是一个numpy函数,使这个计算"到位"?

更准确地说,我有一个标量列表as和一个矩阵列表Ms,我想执行两者中的"点积"(这两个操作数是不同类型的,实际上不是一个),也就是说:

sum(a*M for a, M in zip(as, Ms))
Run Code Online (Sandbox Code Playgroud)

np.dot功能不能做我除了......

Div*_*kar 5

你可以用np.tensordot-

np.tensordot(As,Ms,axes=(0,0))
Run Code Online (Sandbox Code Playgroud)

或者np.einsum-

np.einsum('i,ijk->jk',As,Ms)
Run Code Online (Sandbox Code Playgroud)

样品运行 -

In [41]: As = [2,5,6]

In [42]: Ms = [np.random.rand(2,3),np.random.rand(2,3),np.random.rand(2,3)]

In [43]: sum(a*M for a, M in zip(As, Ms))
Out[43]: 
array([[  6.79630284,   5.04212877,  10.76217631],
       [  4.91927651,   1.98115548,   6.13705742]])

In [44]: np.tensordot(As,Ms,axes=(0,0))
Out[44]: 
array([[  6.79630284,   5.04212877,  10.76217631],
       [  4.91927651,   1.98115548,   6.13705742]])

In [45]: np.einsum('i,ijk->jk',As,Ms)
Out[45]: 
array([[  6.79630284,   5.04212877,  10.76217631],
       [  4.91927651,   1.98115548,   6.13705742]])
Run Code Online (Sandbox Code Playgroud)