相关疑难解决方法(0)

获得总和为M的N个随机数

我想得到N个随机数,它们的总和是一个值.

例如,假设我想要5个随机数,它们的和为1

那么,一个有效的可能性是:

0.2 0.2 0.2 0.2 0.2
Run Code Online (Sandbox Code Playgroud)

其他可能性是:

0.8 0.1 0.03 0.03 0.04
Run Code Online (Sandbox Code Playgroud)

等等.我需要这个来创建模糊C均值的所有物矩阵.

language-agnostic random sum

40
推荐指数
4
解决办法
3万
查看次数

非偏差返回n个随机正数(> = 0)的列表,以便它们的总和== total_sum

我正在寻找一种算法或建议来改进我的代码,以生成一个随机数列表,其总和等于某个任意数.使用我的代码,它总是有偏见,因为第一个数字往往会更高.

有没有办法让数字选择更有效率?

#!/usr/bin/python
'''
  Generate a list of 'numbs' positive random numbers whose sum = 'limit_sum'
'''

import random


def gen_list(numbs, limit_sum):
  my_sum = []
  for index in range(0, numbs):
    if index == numbs - 1:
      my_sum.append(limit_sum - sum(my_sum))
    else:
      my_sum.append(random.uniform(0, limit_sum - sum(my_sum)))

  return my_sum

#test
import pprint
pprint.pprint(gen_list(5, 20))
pprint.pprint(gen_list(10, 200))
pprint.pprint(gen_list(0, 30))
pprint.pprint(gen_list(1, 10))
Run Code Online (Sandbox Code Playgroud)

输出

## output

[0.10845093828525609,
 16.324799712999706,
 0.08200162072303821,
 3.4534885160590041,
 0.031259211932997744]

[133.19609626532952,
 47.464880208741029,
 8.556082341110228,
 5.7817325913462323,
 4.6342577008233716,
 0.22532341156764768,
 0.0027495225618908918,
 0.064738336208217895,
 0.028888697891734455,
 0.045250924420116689]

[]

[10]
Run Code Online (Sandbox Code Playgroud)

python algorithm

14
推荐指数
4
解决办法
2195
查看次数

标签 统计

algorithm ×1

language-agnostic ×1

python ×1

random ×1

sum ×1