如何用NumPy计算两个二维数组的逐元素点积?
对应行点积的NumPy简便实现
你需要的是计算两个二维数组对应行的点积,以下几种NumPy方法都能通过一次调用实现需求:
- 方法一:元素乘法 + 行求和
import numpy as np a = np.array([[0, 1], [1, 1], [1, 0]]) b = np.array([[1, 0], [1, 1], [1, -1]]) dot = np.sum(a * b, axis=1) print(dot) # 输出: [0 2 1]
a * b完成逐元素乘法,np.sum(..., axis=1)沿每行维度求和,直接得到对应行的点积结果。
- 方法二:使用爱因斯坦求和
np.einsum
dot = np.einsum('ij,ij->i', a, b)
参数'ij,ij->i'指定运算规则:两个二维数组的对应位置元素相乘后,对列维度(j)求和,最终保留行维度(i)的结果。
- 方法三:
np.inner结合对角线提取(不推荐)
若要使用你尝试过的np.inner,可通过提取对角线得到结果:
dot = np.inner(a, b).diagonal()
np.inner(a, b)会生成一个3×3矩阵,其中每个元素是a某一行与b某一行的点积,对角线元素即为对应行的点积。但此方法步骤冗余,效率不如前两种。
内容的提问来源于stack exchange,提问作者Paul Jurczak
相关产品推荐
相关产品推荐

