Colab中两段NumPy点积代码的结果差异原因咨询
为什么两段NumPy点积代码输出不同?
嘿,这个问题抓得很准!核心差异完全在于你定义的数组维度不一样,而NumPy的np.dot函数会根据输入数组的维度,自动切换计算逻辑。咱们一步步拆解:
第一段代码:一维数组的向量点积
先看你第一段里的数组:
import numpy as np x = np.array([1,2,3]) y = np.array([4,5,6])
这里的x和y都是一维数组,用x.shape查看的话,结果是(3,)——注意这不是行向量或者列向量,就是单纯的一维序列。哪怕你做x.T转置,一维数组的转置不会改变它的维度,x.T.shape还是(3,)。
当np.dot接收两个一维数组时,它计算的是标准的向量点积:把对应位置元素相乘后求和,结果就是一个标量(也就是你看到的整数32)。
第二段代码:二维数组的矩阵乘法
再看第二段的数组定义:
import numpy as np x = np.array([[1],[2],[3]]) y = np.array([[4],[5],[6]])
这里的x是二维数组,x.shape是(3,1)——这是一个3行1列的列向量;x.T转置后变成(1,3)的行向量。而y同样是(3,1)的二维数组。
当np.dot接收两个二维数组时,它执行的是矩阵乘法:按照矩阵相乘的规则,(1,3)的行向量和(3,1)的列向量相乘,结果会得到一个(1,1)的二维数组,也就是你看到的array([[32]])。
验证维度的小技巧
如果你想确认数组维度,可以在代码里加一行print(arr.shape),比如:
# 第一段的维度验证 x = np.array([1,2,3]) print(x.shape) # 输出 (3,) print(x.T.shape) # 输出 (3,) # 第二段的维度验证 x = np.array([[1],[2],[3]]) print(x.shape) # 输出 (3,1) print(x.T.shape) # 输出 (1,3)
总结一下:本质是一维数组(向量)和二维数组(矩阵)的区别,np.dot对一维输入返回标量点积,对二维输入返回矩阵乘法的结果数组。
内容的提问来源于stack exchange,提问作者Jo-won
相关产品推荐
相关产品推荐

