关于NumPy二维数组维度、轴与散点绘图索引的技术问询
二维数组维度与散点图数据选取的疑问解答
一、先明确数据集的组织逻辑
你用aa = np.random.randn(10, 2)生成的数组,本质是10个独立的数据点,每个点包含2个特征值——每一行对应一个完整的数据点,列则对应这个点的不同属性(比如x坐标和y坐标)。
二、散点图的输入要求决定了数据选取方式
plt.scatter()函数需要两组长度相同的一维数组:一组是所有点的x坐标集合,另一组是所有点的y坐标集合。
x[:,0]的含义是「取所有行的第0列」,得到的是10个点的x坐标,正好是散点图需要的x轴数据;x[:,1]是「取所有行的第1列」,对应10个点的y坐标,作为y轴数据。
而x[0,:]是「取第0行的所有列」,得到的只是第一个数据点的x和y值——用它的话,你只能在图上画出一个点,完全达不到散点图展示整个数据集分布的目的。
三、澄清「维度」与「轴」的概念误区
这里的混淆不是因为场景不同定义变了,而是要区分两个容易混淆的概念:
- 数组的轴(axis):这是NumPy对数据存储结构的定义,axis=0对应行方向(控制样本的数量,这里是10个),axis=1对应列方向(控制每个样本的特征数量,这里是2个);
- 数据的特征维度:指每个样本具备的属性数量,比如这里每个点是2维的(x和y两个属性),这个「维度」对应数组axis=1的长度。
绘图时不是「维度指代列」,而是因为我们默认用「行存样本、列存特征」的方式组织数据——这是数据分析和机器学习里的通用习惯,所以要取所有样本的同一特征列来作为坐标轴数据。如果你的数据集是反过来(列存样本、行存特征,比如shape为(2,10)),那确实会用x[0,:]和x[1,:]来取坐标,但这种组织方式几乎不会用到。
四、推荐参考资料
- 《Python数据分析基础》:重点看NumPy数组索引、Matplotlib散点图的相关章节,理解数据组织与绘图需求的对应关系;
- NumPy官方文档的「数组索引」章节:系统学习数组的切片、索引规则;
- Matplotlib官方文档的
scatter函数说明:明确函数输入数据的格式要求。
内容的提问来源于stack exchange,提问作者user4556432
相关产品推荐
相关产品推荐

