Python - 怎么将一个数字拆分成多个随机数字

前情提要

使用numpy.random.choice()的时候,通过参数p(一个列表)来指定所给选择元素的选择概率。但参数p(选择概率)要保证和为1,这时我又想随机生成选择概率,所以现在的问题就是怎么将1拆分成多个和为1的浮点数。

这个问题但凡读过小学都应该知道怎么解决,但问题是我是个大学生(手动狗头)。

如何解决

例如,现在要将1拆分成8个随机浮点数

  1. 先随机生成8个整数,例如:2,3,5,6,7,8,2,5
  2. 求这8个整数之和sum,即:38
  3. 再用1来乘各个比例,这里没有必要,但是其他数字的拆分就有必要。

例如,要将100拆分成5个随机数

  1. 随即生成5个整数,例如:1,1,2,3,3
  2. 和为10
  3. 拆分结果为:100*(1/10) = 10, 100*(2/10) = 20, 100*(3/10) = 30,10+10+20+30+30=100

代码

import numpy as np
from random import randint


def func(split_num):
    rand_ls = [randint(0, 10) for _ in range(split_num)]
    rand_sum = sum(rand_ls)
    p = list(map(lambda i: i/rand_sum, rand_ls))
    return p


choice_ls = [1, 2, 3, 4, 5, 6, 7, 8]
x = np.random.choice(choice_ls, replace=True, p=func(len(choice_ls)))

若p和不为1,则报错如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/DreamingBetter/article/details/124705148