python - 使用 numpy 将数据集分割成成比例的子集

标签 python numpy

不知道有没有这样的功能:

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/

相关文章:

python - 在 NumPy 中反转 3D 矩阵的所有子矩阵

python - 矩阵乘法tensorflow与numpy的区别

python - 禁用从 python3 urllib3 出现的 HeaderParsingError

python - 如何让3个函数在一个程序中运行

Python 多处理 apply_async "assert left > 0"AssertionError

python - 如何循环遍历日期列并根据特定条件赋值?

python - 可变数量嵌套循环的迭代器

python - 如何使 scipy.interpolate 给出超出输入范围的推断结果?

python - 遍历多维数组的所有一维子数组

python - 在 Python 中将对象标记为已删除