我想知道是否有这样的功能:
my_fun(my_list, *arg)
例如:
my_list = ['a','b','c','d','f',1, 2, 3, 4, 5]
fun_i_am_looking_for (my_list, 0.4, 0.4, 0.1)
result = [['a', 2, 5, 'd'], ['c', 1, 4, 3], ['f']]
我们可以看到arg
的总和为0.9因此my_list
中的一个元素未显示在结果中。
我知道有:
numpy.random.permutate(dataframe.index)
但它只是随机化一个集合,而我想得到一个较小的列表,其长度定义为比例或百分比。我不希望这些子列表是偶数。如果这样的功能不存在,我会写自己的,只是寻找现成的解决方案。
答案 0 :(得分:0)
a = np.arange(100)
b = np.array([0.4, 0.4, 0.1])
for i in range(1, len(b)):
b[i] += b[i-1]
c = np.split(np.random.permutation(a), (b * len(a) + 0.5).astype(np.int))
答案 1 :(得分:0)
似乎没有现成的解决方案,但这可行:
import numpy as np
def split_by_ratio(arr, *ratios):
arr = np.random.permutation(arr)
ind = np.add.accumulate(np.array(ratios) * len(arr)).astype(int)
return [x.tolist() for x in np.split(arr, ind)][:len(ratios)]
现在:
>>> my_list = ['a','b','c','d','f',1, 2, 3, 4, 5]
>>> split_by_ratio(my_list, 0.4, 0.4, 0.1)
[['f', '5', '3', 'a'], ['d', 'b', 'c', '2'], ['4']]