NumPy中np.array([1,2,3])与np.array([[1,2,3]])的区别是什么
两个NumPy数组的核心区别
这是个非常常见的NumPy入门疑问!虽然这两行代码创建的数组看起来都包含[1,2,3],但它们的维度、结构和行为逻辑完全不同,我来一步步拆解:
维度(ndim)差异
第一个代码创建的是一维数组:import numpy as np arry1 = np.array([1,2,3]) print(arry1.ndim) # 输出:1第二个代码创建的是二维数组(行向量):
arry2 = np.array([[1,2,3]]) print(arry2.ndim) # 输出:2简单说,一维数组是"一条线",二维数组是"一张纸里的一行"。
形状(shape)差异
数组的形状直接反映了它的结构:arry1.shape返回(3,)——这是一个单元素元组,表示它只有一个维度,长度为3,没有行/列的概念。arry2.shape返回(1, 3)——表示它有2个维度,1行3列,是标准的矩阵行向量结构。
索引方式不同
因为结构不同,访问元素的方式也有区别:- 一维数组直接通过单索引访问:
arry1[0]就能拿到第一个元素1。 - 二维数组需要两层索引:
arry2[0, 0]或者arry2[0][0]才能拿到1——第一个索引指定行,第二个指定列。
- 一维数组直接通过单索引访问:
运算与广播行为差异
NumPy的广播规则会根据数组维度而变化:
比如做矩阵乘法时,一维数组的点积和二维数组的矩阵乘法结果完全不同:# 一维数组点积,输出标量14 print(arry1 @ np.array([1,2,3])) # 二维数组矩阵乘法,输出[[14]](一个1x1的二维数组) print(arry2 @ np.array([[1],[2],[3]]))再比如和形状为
(3,1)的数组相加时,两者都会被广播成(3,3),但如果是需要严格匹配矩阵维度的场景,二维数组的结构会更符合线性代数的直觉。适用场景不同
- 一维数组适合存储单一维度的序列数据,比如温度随时间的变化值、单个特征的样本集合。
- 二维数组适合表示结构化的矩阵数据,比如一条样本的特征向量(对应行)、或者多行样本组成的数据集,在和其他矩阵(比如权重矩阵)做运算时逻辑更清晰。
内容的提问来源于stack exchange,提问作者Avv
相关产品推荐
相关产品推荐

