我希望有一个6乘12的矩阵,并且:
1-将数字1-12排成6行,每行不重复,并且不在列对1,2-3,4 ... 11-12中重复。
2-如果(i,j)出现在列对(1,2)中,(i,j)或(j,i)不应出现在其他列对中(即列(3,4),( 5,6)...)
这是我迄今取得的成就:
arr = np.zeros((6,12))
arr[0,:] = np.random.choice((range(1,13)),12,replace=False)
for row in range(1,6):
for i in range(0,12,2):
counter = 0
n=np.random.randint(1,13)
while ((n in arr[:,i]) or (n in arr[:,i+1]) or (n in (arr[row,:]))):
n=np.random.randint(1,13)
counter += 1
if counter>100:
print 'ERROR!', 'row',row, 'i',i
break
arr[row,i]=n
for i in range(1,12,2):
counter = 0
n=np.random.randint(1,13)
while ((n in arr[:,i]) or (n in arr[:,i-1]) or (n in (arr[row,:]))):
n=np.random.randint(1,13)
counter += 1
if counter>100:
print 'ERROR!', 'row', row, 'i', i
break
arr[row,i]=n
print arr
df = pd.DataFrame(arr)
df.to_csv('test.csv')
正确的输出应该是这样的:
3 7 11 8 10 12 6 1 2 4 9 5
11 4 12 5 6 8 3 9 10 7 2 1
5 2 1 3 11 9 4 10 8 12 6 7
6 10 9 7 2 3 8 5 11 1 4 12
12 9 6 4 1 7 11 2 3 5 8 10
8 1 10 2 4 5 12 7 9 6 11 3
代码的成功取决于第1行的第一个猜测。我相信我需要进行一个while循环,以便在出现错误时!发生时,代码重置row和i,并从第三行重新启动。
任何人都可以帮忙,应该在哪里设置while循环?
感谢。