不知道有没有这样的功能:
my_fun(my_list, *arg)
- 其中 arg 是列表或比例
- *arg 的每个元素都是 0 到 1 之间的浮点值
- arg 元素的总和必须 <=1
例如:
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)
但它只是随机化一个集合,而我想获得一个较小的列表,其长度定义为比例或百分比。我不希望子列表是均匀的。如果这样的函数不存在,我会编写自己的函数,只是寻找现成的解决方案。
最佳答案
似乎没有现成的解决方案,但这可行:
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']]
关于python - 使用 numpy 将数据集分割成成比例的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38157810/