NumPy数组形状(10,1)与(10,)的差异及转换方法咨询
NumPy数组(10,1)与(10,)的区别及转换方法
核心区别
- 维度差异:
(10,)是一维数组,仅包含一个轴(轴0),存储10个独立元素。(10,1)是二维数组,包含两个轴(轴0和轴1),可看作10行1列的列向量结构。
- 索引方式不同:
- 一维数组
arr_1d取第3个元素用arr_1d[2]。 - 二维数组
arr_2d取第3个元素需要arr_2d[2, 0]或arr_2d[2][0]。
- 一维数组
- 运算广播行为有别:
一维数组(10,)可直接与同形状一维数组逐元素运算;而(10,1)数组与(10,)数组运算时会触发广播(将(10,)扩展为(10,1)),最终结果形状为(10,1)。
转换方法:将(10,1)转为(10,)
以下是几种实用方法,附代码示例:
1. squeeze()方法
移除数组中所有长度为1的轴:
import numpy as np arr_2d = np.random.rand(10, 1) arr_1d = arr_2d.squeeze() print(arr_1d.shape) # 输出 (10,)
2. 切片索引
直接提取所有行的第0列:
arr_1d = arr_2d[:, 0] print(arr_1d.shape) # 输出 (10,)
3. reshape()方法
通过重塑形状指定一维结构:
arr_1d = arr_2d.reshape(-1) # -1表示自动计算维度长度 print(arr_1d.shape) # 输出 (10,) # 也可直接指定长度:arr_2d.reshape(10)
4. ravel()方法
将数组展平为一维(返回视图或副本,取决于原数组存储连续性):
arr_1d = arr_2d.ravel() print(arr_1d.shape) # 输出 (10,)
5. flatten()方法
返回数组的一维副本(无论原数组是否连续):
arr_1d = arr_2d.flatten() print(arr_1d.shape) # 输出 (10,)
内容的提问来源于stack exchange,提问作者djokovic
相关产品推荐
相关产品推荐

