如何在Python中使生成的矩阵不重复?

如何在Python中使生成的矩阵不重复?,python,Python,我们已经创建了一个随机大小的矩阵,并且具有随机数字,但是我们不确定如何确保生成的字符串都不相同。作为参考,我们需要矩阵是非重复的,因为我们试图计算所有字符串集的递归教学维度(基本上是数据集的复杂性度量),如果任何字符串相同,就无法计算 生成的矩阵示例如下: [[0 0 0] [0 1 0] [0 1 0] [0 0 1] [1 0 0] [1 0 1] [0 0 0]] 如您所见,第二个和第三个字符串以及第一个和最后一个字符串是相同的 这是我们当前的代码。我们应该如何确保没有重复

我们已经创建了一个随机大小的矩阵,并且具有随机数字,但是我们不确定如何确保生成的字符串都不相同。作为参考,我们需要矩阵是非重复的,因为我们试图计算所有字符串集的递归教学维度(基本上是数据集的复杂性度量),如果任何字符串相同,就无法计算

生成的矩阵示例如下:

[[0 0 0]
 [0 1 0]
 [0 1 0]
 [0 0 1]
 [1 0 0]
 [1 0 1]
 [0 0 0]]
如您所见,第二个和第三个字符串以及第一个和最后一个字符串是相同的

这是我们当前的代码。我们应该如何确保没有重复

def matrix():
  import numpy as np
  import random

  a = random.randrange (2, 10)
  b = random.randrange (2, a)

  A = np.random.randint(2, size=(a,b))
  print (A)

matrix()

一种可能是在0和2^b-1之间选择一个不同的数字 并将其二进制表示形式用作A中的不同字符串


如果您没有专注于
numpy
,这里有一个使用“and”的选项:

导入itertools
随机输入
b=随机的随机范围(2,10)
a=random.randrange(2,2**b)
words=list(itertools.product([0,1],repeat=b))
矩阵=随机样本(单词,a)
打印(矩阵)
以固定值
b=3
a=7
运行时给出:

[(1, 0, 1), 
 (0, 1, 0), 
 (0, 1, 1), 
 (1, 0, 0), 
 (1, 1, 1), 
 (1, 1, 0), 
 (0, 0, 1)]

请注意,它返回元组,因此如果这很重要,则需要进行简单转换:

words=[itertools.product([0,1],repeat=b]中tup的列表(tup)]

据我所知,您的要求增加了尺寸限制。例如,如果
b
像您的示例中那样是
3
,那么
a
必须是
可能只有2^b个不同的字符串,因此如果a>2^b必须重复。首先创建一个经过所有设置位迭代(000001010011100101110111)的矩阵,然后随机洗牌行,怎么样,如果所需维度不同,最终也会随机删除行?啊,当然是itertools!我知道有一个更简单的方法
[(1, 0, 1), 
 (0, 1, 0), 
 (0, 1, 1), 
 (1, 0, 0), 
 (1, 1, 1), 
 (1, 1, 0), 
 (0, 0, 1)]