如何用一行代码实现numpy多维数组与一维数组沿公共维度相乘?
解决方案
你可以利用NumPy的广播机制实现这个需求,只需将一维数组y的形状调整为与x第一维度匹配的三维形状((m,1,1)),就能自动完成逐块的元素相乘:
import numpy as np result = x * y[:, np.newaxis, np.newaxis]
也可以用reshape方法调整形状,效果完全一致:
result = x * y.reshape(-1, 1, 1)
原理说明
NumPy的广播机制会自动扩展形状较小的数组,使其与形状较大的数组维度兼容。把y从(m,)转为(m,1,1)后,它会在第二、第三维度上自动扩展,匹配x的(m,n,p)形状,从而实现每个x[i,:,:]块与y[i]的逐元素相乘。
内容的提问来源于stack exchange,提问作者Daneel Olivaw
相关产品推荐
相关产品推荐

