如何在numpy数组中返回n个最小k个区间的numpy数组?

时间:2017-10-08 05:12:40

标签: python numpy

有没有办法返回一个大小为k的numpy数组,其中包含数组k个等大小的最小值?

例如:

k = 3
arr = np.array([2,3,4,1,5,1,7,2,5,6,5,4,3,4,6,7,0,7])
mins = min_k(arr, k)//mins = np.array([2,1,2,4,3,0])

我只能想到使用for循环以k的间隔迭代数组,并将该间隔的min添加到新数组中。

1 个答案:

答案 0 :(得分:3)

如果arr的大小是k的倍数:

arr.reshape(-1, k).min(1)
# array([2, 1, 2, 4, 3, 0])

否则,您可以使用边缘值将arr填充为k的倍数,将其重新整理为(-1, k)k列),然后取排min:

k = 3
arr = np.array([2,3,4,1,5,1,7,2,5,6,5,4,3,4,6,7,0,7])

pad_width = 0 if len(arr) % k == 0 else k - len(arr) % k
np.pad(arr, (0, pad_width), 'edge').reshape(-1, k).min(1)
# array([2, 1, 2, 4, 3, 0])