import numpy as np
from random import randint
def genRandomMatrix():
matrix = np.zeros((5,5))
for ix in range(5):
for iy in range(5):
u = randint(1,5) # generate random int to test
while True:
if u in matrix[ix][:] or u in matrix[:][iy]:
# test if random int already in indexed row or indexed column
u = randint(1,5)
# if in row/column, try a new random int
else:
matrix[ix][iy] = u
# safe to insert random int
break
print matrix
genRandomMatrix()
输出只会在卡住之前创建一行:
[[3. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]]
[[3. 1. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]]
[[3. 1. 2. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]]
[[3. 1. 2. 4. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]]
[[3. 1. 2. 4. 5.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]]
答案 0 :(得分:0)
您在if u in matrix[ix, :] or u in matrix[:, iy]:
错误中使用行和列切片。
将您的if语句更改为:
import numpy as np
from random import randint
def genRandomMatrix():
matrix = np.zeros((5,5))
for ix in range(5):
for iy in range(5):
while True:
# random int
u = randint(1,5)
# test if random int already in indexed row or indexed column
if u in matrix[ix, :] or u in matrix[:, iy]:
continue
else:
matrix[ix][iy] = u
break
print matrix
genRandomMatrix()
顺便说一句,这似乎更加优雅,快速修复。
@WebMvcTest