abu*_*rak 0 python numpy matrix-multiplication
我需要将数组A的每一行与元素B的所有行相乘.例如,假设我们有以下数组:
A = np.array([[1,5],[3,6]])
B = np.array([[4,2],[8,2]])
Run Code Online (Sandbox Code Playgroud)
我想得到以下数组C:
C = np.array([[4,10],[8,10],[12,12],[24,12]])
Run Code Online (Sandbox Code Playgroud)
我可以通过使用for循环来做到这一点但我认为可能有更好的方法来做到这一点.
编辑:我想重复和平铺,但我的阵列不是那么小.它可能会产生一些内存问题.
杠杆broadcasting扩大会变暗A以3D与None/np.newaxis,执行的elementwise乘法和重塑回2D-
(A[:,None]*B).reshape(-1,B.shape[1])
Run Code Online (Sandbox Code Playgroud)
基本上是 -
(A[:,None,:]*B[None,:,:]).reshape(-1,B.shape[1])
Run Code Online (Sandbox Code Playgroud)
示意性地说,它是:
A : M x 1 x N
B : 1 x K x N
out : M x K x N
Run Code Online (Sandbox Code Playgroud)
最后重塑合并最后两个轴并给我们(M x K*N)成形2D阵列.
我们还可以einsum用来3D在一个函数调用中执行扩展和元素乘法 -
np.einsum('ij,kj->ikj',A,B).reshape(-1,B.shape[1])
Run Code Online (Sandbox Code Playgroud)