如何将大小为 N 的列表尽可能均匀地分成 K 组
How do you split a list of Size N, into K groups as evenly as possible
之前也有人问过类似的问题,但是回答的是"how to split a list into evenly sized chunks"的问题,不是把一个list分成k组,尽量均匀:
这是我想要做的:
例如对于 N = 4,K = 3:
Return 3 个列表,以下元素来自 N
k1 = N1
k2 = N2
k3 = N3, N4
或 N = 6,且 K=4:
Return 4 个列表,以下元素来自 N
k1 = N1
k2 = N2
k3 = N3, N4
k4 = N5, N6
在 python 中可以表示为:
n = ["1","2","3","4","5","6"]
k = 4
print(solution(n,k))
$ ["1"]
$ ["2"]
$ ["3", "4"]
$ ["5", "6"]
一个例子是说我有 K=4 个处理器和 N = 6 个任务,我如何在处理器之间平均分配任务。
这是一个用 C 语言编写的类似问题:How to share work roughly evenly between processes in MPI despite the array_size not being cleanly divisible by the number of processes?
那里采用的方法是在 "processors" 中分配 int(N/K) 任务,并共享其余部分。
我想知道是否有 pythonic 方法可以做到这一点。
您可以使用 numpy.array_split:
import numpy as np
arr = range(6)
np.array_split(arr, 4)
>>[array([0, 1]), array([2, 3]), array([4]), array([5])]
之前也有人问过类似的问题,但是回答的是"how to split a list into evenly sized chunks"的问题,不是把一个list分成k组,尽量均匀:
这是我想要做的:
例如对于 N = 4,K = 3:
Return 3 个列表,以下元素来自 N
k1 = N1
k2 = N2
k3 = N3, N4
或 N = 6,且 K=4:
Return 4 个列表,以下元素来自 N
k1 = N1
k2 = N2
k3 = N3, N4
k4 = N5, N6
在 python 中可以表示为:
n = ["1","2","3","4","5","6"]
k = 4
print(solution(n,k))
$ ["1"]
$ ["2"]
$ ["3", "4"]
$ ["5", "6"]
一个例子是说我有 K=4 个处理器和 N = 6 个任务,我如何在处理器之间平均分配任务。
这是一个用 C 语言编写的类似问题:How to share work roughly evenly between processes in MPI despite the array_size not being cleanly divisible by the number of processes?
那里采用的方法是在 "processors" 中分配 int(N/K) 任务,并共享其余部分。
我想知道是否有 pythonic 方法可以做到这一点。
您可以使用 numpy.array_split:
import numpy as np
arr = range(6)
np.array_split(arr, 4)
>>[array([0, 1]), array([2, 3]), array([4]), array([5])]