我想用给定密度d(非零项的百分比)制作一个n×n矩阵的布尔值(0或1)。我相信可以用随机模块和列表理解来做到这一点。
对于这个问题,我们不要考虑sci.py或num.py
列出清单:
import random
n = 5
[[random.randint(0,1) for column in range(n)] for row in range(n)]
[[0, 0, 0, 0, 1],
[1, 0, 1, 0, 0],
[0, 1, 0, 1, 1],
[1, 1, 1, 0, 0],
[0, 1, 1, 0, 0]]
我们有一个矩阵。问题是密度总是≈5。
那么我们如何改变内部列表理解以给出一个概率等于密度的值?
[[0 if <condition> else 1 for column in range(n)] for row in range(n)]
答案 0 :(得分:1)
我建议0 if random.random() > d else 1
答案 1 :(得分:0)
使用random.random
在float
和0.0
之间返回1.0
:
>>> import random
>>> import pprint
>>> m = [[0 if random.random() < 0.3 else 1 for _ in range(5)] for _ in range(5)]
>>> pprint.pprint(m)
[[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 0, 0, 1],
[0, 1, 0, 0, 1],
[0, 0, 1, 1, 1]]