我有两个numpy数组F和C,它们的维数分别为NxM和MxB。我如何以有效的方式得到一个元素为Result[n,m,b] = F[n,m]*C[m,b],维度为NxMxB的矩阵?
F
C
NxM
MxB
Result[n,m,b] = F[n,m]*C[m,b]
NxMxB
nue99wik1#
虽然@Nick奥德尔评论的解决方案有效且快速,但它可能不是很可读。另一种选择是使用numpy.einsum,它允许您明确地声明哪些维度必须相乘,哪些维度必须求和。就你的情况来说
numpy.einsum
import numpy as np N = 20 M = 40 B = 10 F = np.random.rand(N,M) C = np.random.rand(M,B) Result = np.einsum('nm,mb->nmb', F, C) print(Result.shape) # (20,40,10)
'nm,mb->nmb'是指:
'nm,mb->nmb'
nm
n
m
mb
b
-->nmb
1条答案
按热度按时间nue99wik1#
虽然@Nick奥德尔评论的解决方案有效且快速,但它可能不是很可读。另一种选择是使用
numpy.einsum
,它允许您明确地声明哪些维度必须相乘,哪些维度必须求和。就你的情况来说'nm,mb->nmb'
是指:nm
:第一矩阵具有分别带有下标n
和m
的维度,mb
:第二矩阵具有分别带有下标m
和b
的维数,-->nmb
:乘以n
xm
xb
,不对任何下标求和。