NumPy中reshape(1,50)后数组shape输出(50,)的原因是什么
NumPy reshape后shape显示为(50,)的原因说明
最核心的问题:你没保存reshape的返回结果
NumPy的reshape()不是原地修改数组的方法,你写ARRAY.reshape(1,50)的时候,方法只是返回了一个形状为(1,50)的新数组,你原来的ARRAY变量压根没被改动,查它的shape当然还是原来的一维数组的形状(50,)。
要拿到重塑后的数组,必须把返回值赋值回去:
ARRAY = ARRAY.reshape(1,50)
这时候再查ARRAY.shape才会输出(1,50)。
关于(50,)这个shape的误解
这个输出完全没有误导性,这是NumPy对不同维度数组的标准shape标记规则:shape元组的长度等于数组的维度数(也叫秩),不同维度的数组shape不可能相同:
- 元组长度为1,写作
(n,):对应一维数组,这种数组是纯线性序列,根本没有“行”“列”的二维概念,既不是n行1列,也不是1行n列。 - 元组长度为2,写作
(n,1):对应二维数组,结构是n行1列的列向量。 - 元组长度为2,写作
(1,n):对应二维数组,结构是1行n列的行向量。
你之前认为“50行1列的数组shape是(50,)”是认知错误,50行1列是二维数组,shape固定是(50,1),和一维的(50,)是完全不同的结构,不可能返回相同的shape结果。
小提示:如果需要把一维数组转成列向量,可以写
ARRAY.reshape(-1,1),转成行向量写ARRAY.reshape(1,-1),-1代表NumPy自动计算该维度的长度,不用手动数元素个数。
内容的提问来源于stack exchange,提问作者stories shubham
相关产品推荐
相关产品推荐

