如何在NumPy中无需reshape即可切片出二维列数组?
无需reshape,在NumPy中获取二维列数组切片的方法
当然有!你遇到的是NumPy切片时的“维度挤压”问题——当用单个索引选取某一列(或行)时,NumPy默认会返回一维数组。不过不用reshape也能轻松得到形状为(3,1)的二维数组,这里有几种实用的方法:
方法1:用列表形式指定列索引
把列索引放在列表里,NumPy会将其视为“选取多个列”(哪怕只有一个),从而保留二维结构:
import numpy as np a = np.arange(9).reshape(3,3) b = a[:, [1]] # 注意这里是[1]而非单独的1 print(b.shape) # 输出 (3,1)
方法2:使用长度为1的切片范围
利用切片的左闭右开特性,指定一个只包含目标列的切片区间,同样能保留维度:
b = a[:, 1:2] print(b.shape) # 输出 (3,1)
这里1:2表示选取索引从1到2(不包含2)的列,也就是仅第2列,但切片操作会维持原数组的二维结构。
方法3:用np.newaxis插入维度
通过np.newaxis(或等价的None)在指定位置插入一个新维度,直接将一维结果转为二维列向量:
b = a[:, 1, np.newaxis] # 也可以写成 b = a[:, 1, None] print(b.shape) # 输出 (3,1)
这几种方法都不需要调用reshape,根据自己的代码习惯选择即可~
内容的提问来源于stack exchange,提问作者liyuan
相关产品推荐
相关产品推荐

