有没有办法获得具有唯一行的矩阵?

时间:2019-02-15 14:13:28

标签: python python-3.x matrix unique

我正在寻找一种生成具有一定间隔内的整数值的矩阵的方法,其中矩阵的每一行都是唯一的(即,行所组成的元素集将不完全是的元素集)任何其他行)基本上,我正在寻找的等效行矩阵:

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))

基本上,我在其中创建一个唯一行并将其附加。但这有危险,两行将具有相同的元素(即使顺序不同)。

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

中阅读更多内容。