有没有办法返回一个大小为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添加到新数组中。
答案 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])