gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 08:19:55 25 4
gpt4 key购买 nike

我正在寻找一种方法来生成一个具有间隔内整数值的矩阵,其中矩阵的每一行都是唯一的(即一行包含的元素集将不完全是任何其他行)基本上,我正在寻找相当于的行矩阵:

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

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

最佳答案

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]]
<小时/>

如果您想使用范围内的所有数字,则更容易对它们进行洗牌和分区:

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

对于分区,您可以在How do you split a list into evenly sized chunks?中阅读更多内容。

关于python - 有没有办法获得具有唯一行的矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54711148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com