如何用numpy.delete()循环删除列表中数组的指定列?
循环删除列表中numpy数组的指定列
核心思路
你的列表R每个元素是**(二维numpy数组, 一维numpy数组)的元组,要删除指定列时,只需遍历每个元组,分别对两个数组执行删除操作,再将处理后的元组收集到新列表即可。注意:numpy数组是0索引**,你说的"第3列"对应索引2,这点要先对应好。
完整代码实现
import numpy as np # 原始列表R R = [ (np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), np.array([100, 101, 102])), (np.array([[10, 11, 12], [13, 14, 15], [16, 17, 18]]), np.array([103, 104, 105])) ] # 要删除的列索引(第3列对应索引2) target_idx = 2 # 初始化新列表 R1 = [] for arr_tuple in R: # 处理二维数组:删除指定列,axis=1表示操作列维度 new_2d_arr = np.delete(arr_tuple[0], target_idx, axis=1) # 处理一维数组:删除指定位置的元素 new_1d_arr = np.delete(arr_tuple[1], target_idx) # 将处理后的数组对加入新列表 R1.append((new_2d_arr, new_1d_arr)) # 验证结果 for item in R1: print("二维数组:") print(item[0]) print("一维数组:") print(item[1])
关键细节说明
- np.delete的参数含义
- 第一个参数是要操作的数组;
- 第二个参数是要删除的索引(支持单个索引或索引列表);
- 第三个参数
axis:仅针对多维数组,axis=1表示删除列,axis=0表示删除行;一维数组无需指定axis。
- 效率优化
你的列表规模较大时,numpy的向量化操作比纯Python循环遍历元素删除高效得多,所以优先用np.delete而非手动操作数组元素。 - 索引对应关系
若你需要根据"第i列"来删除,记得将target_idx设为i-1,比如删除第1列对应target_idx=0,删除第2列对应target_idx=1。
内容的提问来源于stack exchange,提问作者S C
相关产品推荐
相关产品推荐

