【发布时间】:2017-03-18 13:24:54
【问题描述】:
使用 np.argpartition,它不会对整个数组进行排序。它只保证第 k 个元素处于排序位置,并且所有较小的元素都将移到它之前。因此,前 k 个元素将是 k 个最小的元素
>>> num = 3
>>> myBigArray=np.array([[1,3,2,5,7,0],[14,15,6,5,7,0],[17,8,9,5,7,0]])
>>> top = np.argpartition(myBigArray, num, axis=1)[:, :num]
>>> print top
[[5 0 2]
[3 5 2]
[5 3 4]]
>>> myBigArray[np.arange(myBigArray.shape[0])[:, None], top]
[[0 1 2]
[5 0 6]
[0 5 7]]
这将返回每列的 k 最小值。请注意,这些可能不是按排序顺序排列的。我使用此方法是因为以这种方式按排序顺序获取前 k 个元素需要 O(n + k log k) 时间 我想按排序顺序获取每列的 k 最小值,而不增加时间复杂度。 有什么建议么??
【问题讨论】:
-
您的问题是如何从最小的k 到最大的(顶部?)k?在您的示例中,您似乎已经处理了最小的情况。或者问题是如何从行到列?
-
不,我想按排序顺序获取每列的 k 最小值。
标签: python-2.7 numpy