NumPy中1-D数组定义疑问:为何代码判定为2-D数组?
NumPy中的1-D数组到底是什么?
我太懂你这种困惑了——刚上手NumPy的时候,几乎所有人都会把视觉上像“一行”或“一列”的数组当成一维,但其实NumPy对维度的定义和我们直观的“行列”认知完全不一样!
核心要点在这里:NumPy的维度是基于数组的轴(axis)数量,而不是你打印出来的样子:
- 真正的1-D数组只有一个轴,它没有“行”或者“列”的概念,就是一条纯粹的数值序列,你可以把它想象成一串没有方向的珠子。
- 你说的“1行任意列”或者“1列任意行”的数组,其实都是2-D数组——它们有两个轴(axis 0对应行,axis 1对应列),只不过其中一个轴的长度是1而已。
给你举几个直观的代码例子就清楚了:
真正的1-D数组
import numpy as np # 创建一维数组 arr_1d = np.array([1, 2, 3, 4]) # 查看形状:单元素元组,代表只有一个轴,长度为4 print(arr_1d.shape) # 输出 (4,) # 查看维度数 print(arr_1d.ndim) # 输出 1
容易被混淆成1-D的2-D数组
# 1行4列的二维数组(注意外层多了一层括号) arr_2d_row = np.array([[1, 2, 3, 4]]) print(arr_2d_row.shape) # 输出 (1, 4) print(arr_2d_row.ndim) # 输出 2 # 4行1列的二维数组 arr_2d_col = np.array([[1], [2], [3], [4]]) print(arr_2d_col.shape) # 输出 (4, 1) print(arr_2d_col.ndim) # 输出 2
小技巧:区分与转换
- 永远用
ndim属性看维度数,shape属性看每个轴的长度,这比看打印结果靠谱多了。 - 如果需要把这种“单行/单列”的二维数组转成一维,可以用
flatten()或者ravel():
arr_1d_converted = arr_2d_row.flatten() print(arr_1d_converted.shape) # 输出 (4,)
简单总结:1-D数组只有一个轴,没有行列之分;只要有两个轴,哪怕其中一个轴长度为1,那也是二维数组。
内容的提问来源于stack exchange,提问作者Waseem.py
相关产品推荐
相关产品推荐

