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功能不能做我除了......
你可以用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)