python - 数独生成器 - 索引矩阵,测试行/列中的重复值
问题描述
我说谎了。它不是真正的数独生成器,但我正在尝试随机生成一个 5x5 矩阵,有点像一个完整的数独网格,其中数字在每一行或每一列中都不重复。但是,我不需要检查一个数字是否在一个框中重复。
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.]]
解决方案
您numpy.matrix
错误地使用了行和列切片。
将您的 if 语句更改为:
if u in matrix[ix, :] or u in matrix[:, iy]:
顺便说一句,通过快速修复,这似乎更优雅。
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()
推荐阅读
- javascript - 如何从 Node.js 中的工作簿中删除工作表?// 类型错误:无法读取未定义的属性“删除”
- cookies - 如何在不担心 GDPR 或 cookie 的情况下使用 Google Analytics?
- prolog - 使用 Prolog 库 Simplex 求解线性方程组
- javascript - 无法从响应标头访问访问令牌和 uid
- matlab - 使用 plot 命令绘制任何原始数据矩阵的任何段,x 轴为时间,y 轴为电压(实际数据)
- r - 使用 plotly 跨动画帧的恒定热图
- audio - ffmpeg showspectrumpic fscale=log 不渲染右声道
- javascript - OnCreate 事件的确认对话框
- javascript - Expo 目前未启用对实验性语法“jsx”的支持
- sql - SQL:从另一个表中减去一个表中的值