您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使用NumPy从矩阵获取最小/最大n值和索引的有效方法

使用NumPy从矩阵获取最小/最大n值和索引的有效方法

从另一个答案开始,NumPy添加numpy.partitionnumpy.argpartition函数进行部分排序,使您可以及时执行此O(arr.size)操作,或者O(arr.size+n*log(n))如果您需要按排序顺序排列的元素。

numpy.partition(arr, n)返回一个数组的大小arr,其中n第i个元素是这将是什么,如果该阵列被分选。所有较小的元素都在该元素之前,而所有较大的元素都在之后。

numpy.argpartitionnumpy.partitionnumpy.argsortnumpy.sort

这是使用这些函数查找n二维最小元素的索引的方式arr

flat_indices = numpy.argpartition(arr.ravel(), n-1)[:n]
row_indices, col_indices = numpy.unravel_index(flat_indices, arr.shape)

而且,如果您需要按顺序排列索引,那么row_indices[0]最小元素的行而不是最小元素之一也将是n

min_elements = arr[row_indices, col_indices]
min_elements_order = numpy.argsort(min_elements)
row_indices, col_indices = row_indices[min_elements_order], col_indices[min_elements_order]

一维的情况要简单得多:

# Unordered:
indices = numpy.argpartition(arr, n-1)[:n]

# Extra code if you need the indices in order:
min_elements = arr[indices]
min_elements_order = numpy.argsort(min_elements)
ordered_indices = indices[min_elements_order]
其他 2022/1/1 18:34:00 有430人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶