Python中NumPy删除数组指定索引元素并获取扁平化数组的方法
实现方法
直接调用flatten()只会把多维数组按顺序展开成一维,不会过滤元素,要实现指定二维坐标删除后再展平的需求,可以按以下步骤处理:
- 先把所有待删除的二维坐标,转换成数组按行优先(和
flatten()默认展开规则一致)扁平化后的一维索引 - 对展平后的数组,删除对应索引位置的元素即可得到目标结果
T
完整可运行代码:
import numpy as np inv_r = (1e4) * np.array([[0.60800941, 0.79907128, 0.99442121], [0.61174008, 0.84891968, 0.71449188], [0.6211801 , 0.88869614, 0.91835812]]) # 待删除的二维坐标集合 del_positions = [(0, 2), (1, 0), (1, 1)] # 转换为扁平化后的一维索引 del_flat_indices = np.ravel_multi_index(tuple(zip(*del_positions)), inv_r.shape) # 展平数组后删除对应元素 T = np.delete(inv_r.flatten(), del_flat_indices) print([T])
运行代码后输出和期望完全一致:
[array([6080.0941, 7990.7128, 7144.9188, 6211.801 , 8886.9614, 9183.5812])]
关键说明
np.ravel_multi_index是numpy提供的索引转换工具,会自动按照指定的数组形状、展开顺序计算多维坐标对应的一维位置,避免手动计算索引出错。np.delete不会修改原数组,会返回删除指定位置元素后的新数组,不需要额外做展平之外的维度处理。
内容的提问来源于stack exchange,提问作者Wiz123
相关产品推荐
相关产品推荐

