理解numpy.dot()多维数组点积规则及实例计算细节
numpy.dot() 多维数组点积规则详解
核心规则回顾
当a是N维数组,b是M维数组(M≥2)时,点积定义为对a的最后一个轴与b的倒数第二个轴进行对应元素相乘后求和。
实例代码
import numpy as np # 3维数组a,shape=(2, 3, 3) a = np.array([[[2,3,4],[5,6,7],[1,2,3]],[[1,3,4],[7,1,2],[6,2,1]]]) # 2维数组b,shape=(3, 3) b = np.array([[1 , 2, 3],[4, 5 ,6],[7, 8, 9]]) # 计算点积 result = np.dot(a, b)
疑问解答
1. 结果中的第一个值“42”是如何计算的?
结果的第一个元素42,是a的最外层第一个子数组的第一行[2, 3, 4],与b的第一列[1, 4, 7]做对应元素相乘后求和:
2*1 + 3*4 + 4*7 = 2 + 12 + 28 = 42
同理,结果中同一行的51和60,是这个a的子行分别与b的第二列、第三列做相同计算:
51 = 2*2 + 3*5 + 4*8 = 4 + 15 + 3260 = 2*3 + 3*6 + 4*9 = 6 + 18 + 36
2. a的最后一个轴和b的倒数第二个轴分别指什么?
numpy数组的轴从0开始编号,维度顺序从外到内:
- 对于a数组(shape=(2,3,3)):
- 轴0:最外层维度(长度2,对应2个大子数组)
- 轴1:中间维度(长度3,每个大子数组含3行)
- 轴2(最后一个轴):最内层维度(长度3,每行含3个元素)
- 对于b数组(shape=(3,3)):
- 轴0(倒数第二个轴):行维度(长度3,共3行)
- 轴1:列维度(长度3,共3列)
规则的本质是:要求a的最后一个轴长度与b的倒数第二个轴长度相等(这里都是3),才能进行对应元素相乘求和——这其实就是矩阵乘法中“行×列”的点积逻辑,多维数组下则是对所有非目标轴的维度做批量矩阵乘法。
内容的提问来源于stack exchange,提问作者kayalotta
相关产品推荐
相关产品推荐

