我正在寻找一种生成具有一定间隔内的整数值的矩阵的方法,其中矩阵的每一行都是唯一的(即,行所组成的元素集将不完全是的元素集)任何其他行)基本上,我正在寻找的等效行矩阵:
random.sample(range(0, 35), i+1
编辑:
每次迭代后矩阵大小都会变化。间隔是0-35。 目前,我已经实现了
for j in range (5):
comb_elms_list.append(random.sample(range(0, 35), i+1))
基本上,我在其中创建一个唯一行并将其附加。但这有危险,两行将具有相同的元素(即使顺序不同)。
答案 0 :(得分:1)
set()
只能包含唯一元素-元组是可哈希的,可以放入set
中。
从一个间隔中创建tuples
个数字,并将其添加到set
中,直到set
的长度与您的行数匹配为止。然后从set
创建列表列表:
import random
interval = range(100) # plenty more numbers then neeeded to fill 5*3 w/o repeats
matrix = (5,3)
ranges= set()
while len(ranges) < matrix[0]:
ranges.add(tuple(random.sample(interval, k=matrix[1])))
matrix = [ list(t) for t in ranges ]
print(matrix)
请确保您有足够大的间隔,否则您将一遍又一遍地得到相同的元组,并且while
将永远不会结束。
输出:
[[23, 16, 93], [50, 60, 38], [86, 12, 3], [35, 28, 89], [77, 47, 36]]
如果要在范围内使用 all 个数字,则可以更方便地对其进行随机排序和分区:
import random
matrix = (5,3) # dimension of matrix
m = matrix[0]*matrix[1] # total numbers needed
interval = random.sample(range(m), k=m) # create a shuffled list of the complete range
# partition the list into correctly sized intervals
k = [ interval[i*matrix[1]:(i+1)*matrix[1]] for i in range(matrix[0])]
print(k) # [[12, 3, 4], [2, 11, 8], [10, 5, 14], [1, 0, 6], [13, 9, 7]]
对于分区,您可以在Here
中阅读更多内容。