这样的事情怎么样?
import random
def create_matrix(width, height):
mat = []
for i in range(height):
mat.append([]) # create sublist for each height level
for _ in range(width):
# generate a random number in inclusive range [1, 5]
random_number = random.randint(1, 5)
# 80% chance the number is one of 1, 2, 3, or 4 (arbitrary; could be 1, 3, 4, or 5, just not the entire range)
if random_number in {1, 2, 3, 4}:
mat[i].append(1)
# 20% chance it's 5
else:
mat[i].append(2.5)
return mat
一个结果:
>>> print(create_matrix(10, 10))
[[1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [2.5, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 2.5, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 2.5, 2.5], [2.5, 1, 1, 1, 1, 1, 1, 1, 1, 1], [2.5, 1, 1, 1, 1, 2.5, 1, 1, 2.5, 2.5], [1, 2.5, 1, 1, 1, 2.5, 1, 1, 2.5, 1], [1, 1, 1, 2.5, 2.5, 1, 1, 1, 1, 1], [1, 1, 1, 1, 2.5, 1, 1, 1, 2.5, 1], [1, 2.5, 1, 1, 1, 1, 1, 1, 2.5, 1]]
我们可以验证1s 和2.5s 的数量匹配(或非常接近)您指定的比例:
>>> {number: [val for row in mat for val in row].count(number) for number in {1, 2.5}}
{1: 82, 2.5: 18}
经过多次迭代,这些比例将分别接近 80% 和 20%。但是随机机会会围绕这些方法产生一些变化。
请注意,这根本不能确保每一行至少有一个2.5(不知道这是否与您的问题有关)。但这应该会给你一个好的开始。