numpy数组的while循环的位置

时间:2015-08-14 23:30:25

标签: arrays for-loop numpy while-loop

我希望有一个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循环?

感谢。

0 个答案:

没有答案