如何使用np.maximum.reduceat处理二维数组,按索引提取对应最值数据
按索引分组提取数组最大值对应行数据
我拥有一个形状为(3, k)的二维float数组,其中第一行与第二行是成对的浮点数据,第三行代表索引。需要按照第三行的索引进行分组,获取每组内第一行的最大值,同时获取该最大值对应的第二行数据以及对应索引值。
示例
import numpy as np data = np.array([[ 0.45114132, 0.31522008, 0.66176217, 0.45114132, 0.26872137], [11. , 6. , 10. , 4. , 8. ], [ 0. , 0. , 0. , 1. , 1. ]]) # 预期输出: array([[0.66176217, 0.45114132], [10., 4], [0, 1]])
当前尝试的方法及问题
方法1:使用np.maximum.reduceat
仅能获取第一行的分组最大值,无法同步提取对应第二行和索引数据:
indx = np.unique(data[2].astype(int),return_index=1)[1] np.maximum.reduceat(data[0], indx) # 输出 array([0.66176217, 0.45114132])
方法2:使用掩码筛选
无法得到正确的分组对应结果,会包含重复的最大值条目:
mask = np.maximum.reduceat(data[0], indx) data[:, np.isin(data[0], mask)] # 输出 array([[ 0.45114132, 0.66176217, 0.45114132], [11. , 10. , 4. ], [ 0. , 0. , 1. ]])
需求
希望避免使用循环或列表实例化,因为处理大规模数据时这类方法效率过低。
内容的提问来源于stack exchange,提问作者ycohui
相关产品推荐
相关产品推荐

