我正在尝试用Python创建K MxN matrices
,并用(M,N,K)
和{{这两个矩阵存储在numpy
C
数组A
中1}},形状分别为B
和(K, M)
。第一个矩阵计算为(K,N)
,其中C0 = a0.T x b0
是a0
的第一行,A
是b1
的第一行,第二个矩阵是{ {1}},依此类推。
现在我正在使用for循环来计算矩阵。
B
由于操作是独立的,所以我想知道是否存在一些避免for循环的pythonic方法。也许我可以对代码进行矢量化处理,但是我看不到如何实现。
答案 0 :(得分:0)
In [235]: A = np.random.random((10,800))
...: B = np.random.random((10,500))
...: C = np.zeros((800,500,10))
...: for k in range(10):
...: C[:,:,k] = A[k,:][:,None] @ B[k,:][None,:]
...:
In [236]: C.shape
Out[236]: (800, 500, 10)
批处理矩阵乘积,然后转置
In [237]: np.allclose((A[:,:,None]@B[:,None,:]).transpose(1,2,0), C)
Out[237]: True
但是因为矩阵乘积轴的大小为1,并且没有其他求和,所以广播乘法也一样好:
In [238]: np.allclose((A[:,:,None]*B[:,None,:]).transpose(1,2,0), C)
Out[238]: True
执行时间大致相同