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

为何Numpy中[]与[[]]运算结果不同?附实例疑问

Numpy数组维度与矩阵乘法常见疑问解答

问题1:为什么np.dot(l.T,l)和np.dot(s.T,s)结果不同?

先看你的代码:

import numpy as np

l = np.array([1,-2.6])
s = np.array([[1,-2.6]])
l_result = np.dot(l.T,l)
s_result = np.dot(s.T,s)
print(l_result, s_result)

输出是7.76和[[ 1. -2.6] [-2.6 6.76]],本质原因是一维数组和二维数组在Numpy中的行为差异:

  • l是一维数组,形状为(2,)。Numpy的一维数组没有“行向量”或“列向量”的概念,所以l.T的形状依然是(2,)(转置对一维数组无效)。np.dot(l.T, l)计算的是向量点积,也就是对应元素相乘后求和:1*1 + (-2.6)*(-2.6) = 1 + 6.76 = 7.76,结果是一个标量。
  • s是二维数组,形状为(1,2)(可以理解为一行两列的矩阵)。s.T会转置成形状(2,1)的二维数组(两行一列的矩阵)。np.dot(s.T, s)执行的是矩阵乘法:(2,1)的矩阵乘以(1,2)的矩阵,得到(2,2)的矩阵,每个元素是对应行和列的点积,也就是你看到的结果。

如果想让l的运算也得到矩阵结果,可以把l转换成二维数组,比如l = np.array([[1,-2.6]]),或者用l.reshape(1,2),这样l.T就是(2,1),np.dot(l.T,l)就会和s的结果一致。

问题2:为什么s[0,:]输出没有外层[]?

你的数组定义:

s = np.array([[ 1., -2.6], [-1., 0.4], [-1., -0.6], [ 0., 2.4], [ 1., 0.4]] )

s是一个形状为(5,2)的二维数组。当你用s[0,:]提取第一行时,Numpy默认会降维:把二维数组的单行转化为一维数组(形状从(1,2)变成(2,)),所以输出是[1. -2.6],没有外层的[]。

如果想保持二维结构(即输出带外层[]),可以用以下两种方式:

  • 用索引数组取行:s[[0], :],结果形状是(1,2),输出为[[1. -2.6]]
  • 用切片:s[0:1, :],同样得到形状(1,2)的二维数组

内容的提问来源于stack exchange,提问作者Yograj Singh Mandloi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:47:50