python 随机生成数 和为1

做到这一点的最好方法是简单地列出你想要的数字,然后将它们全部除以总和。他们以这种方式完全随机。

r = [ran.random() for i in range(1,100)]
s = sum®
r = [ i/s for i in r ]

或者,正如@TomKealy 所建议的那样,将总和和创建保持在一个循环中:

rs = []
s = 0
for i in range(100):
r = ran.random()
s += r
rs.append®

为了获得最快的性能,请使用 numpy :

import numpy as np
a = np.random.random(100)
a /= a.sum()

你可以给随机数任何你想要的分布,一个概率分布:

a = np.random.normal(size=100)
a /= a.sum()

---- 时间 —-

In [52]: %%timeit
…: r = [ran.random() for i in range(1,100)]
…: s = sum®
…: r = [ i/s for i in r ]
…:
1000 loops, best of 3: 231 µs per loop

In [53]: %%timeit
…: rs = []
…: s = 0
…: for i in range(100):
…: r = ran.random()
…: s += r
…: rs.append®
…:
10000 loops, best of 3: 39.9 µs per loop

In [54]: %%timeit
…: a = np.random.random(100)
…: a /= a.sum()
…:
10000 loops, best of 3: 21.8 µs per loop

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
生成随机树的常用算法是Prim算法和Kruskal算法,它们都可以用来生成带权的树,也可以用来生成无权的树。这里以Prim算法为例,介绍如何在Python中生成随机无权树的代码: ```python import random # 定义节点类 class Node: def __init__(self, val): self.val = val self.neighbours = [] # 定义生成随机树的函 def generate_random_tree(n): nodes = [Node(i) for i in range(n)] # 创建节点列表 root = nodes[0] # 随机选取一个节点作为根节点 visited = {root} # 标记已经访问的节点 unvisited = set(nodes[1:]) # 未访问的节点集合 while unvisited: # 随机选择一个已经访问的节点和一个未访问的节点 v = random.choice(list(visited)) u = random.choice(list(unvisited)) # 将u加入到v的邻居列表中,并标记u已经访问 v.neighbours.append(u) visited.add(u) unvisited.remove(u) return root # 测试代码 if __name__ == '__main__': root = generate_random_tree(10) print(root.val) print([node.val for node in root.neighbours]) ``` 这段代码中,我们首先定义了一个节点类,每个节点有一个值和一个邻居列表。然后定义了一个生成随机树的函,函的输入是节点个n,输出是随机生成的树的根节点。在函中,我们首先创建节点列表,然后随机选取一个节点作为根节点,并将其标记为已经访问。然后我们维护两个集合,一个是已经访问的节点集合visited,一个是未访问的节点集合unvisited。在每一次循环中,我们随机选择一个已经访问的节点v和一个未访问的节点u,将u加入到v的邻居列表中,并将u标记为已经访问。最后返回根节点即可。 以上代码仅给出了一个简单的无权树的生成算法,如果需要生成带权树,可以在每次选择未访问节点时,随机赋予一个权值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值