You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:14:11