python - 有没有办法获得具有唯一行的矩阵?
问题描述
我正在寻找一种方法来生成一个间隔内具有整数值的矩阵,其中矩阵的每一行都是唯一的(即,一行所包含的元素集将不完全是任何其他行的元素集) 基本上,我正在寻找相当于的逐行矩阵:
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()
s 只能保存唯一元素 - 元组是可散列的并且可以放入set
.
从间隔创建tuples
数字并将它们添加到 a中set
,直到set
-length 与您的行数匹配。然后从以下创建列表列表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]]
对于分区,您可以阅读如何将列表拆分为大小均匀的块?
推荐阅读
- asp.net-mvc - 从javascript中的剑道树视图中获取选定的项目
- go - 使用额外参数实现分段文件上传
- mysql - 查询适用于 Windows 上的 MySQL,但不适用于 Ubuntu 上的 Mysql
- json - 如何在单个 swagger doc 文件中合并 swagger 多个文件?
- c - 在 c 中使用 getch() 仅将数字和字母作为输入
- python - 如何转换日期格式(整列)并使用季度和年份再生成一列
- amazon-ec2 - 如何在 EC2 上获得更多空间来安装 tesseract
- javascript - Selenium 脚本因站点缓慢性质或网络问题而失败
- datatables - DataTables 不保存日期范围搜索的状态
- mysql - Sequelize create TypeError:无法读取未定义的属性“应用”