首先,我要感谢你的帮助。我试图在python 3.6中像这样做一个蜗牛/螺旋矩阵
[10 9 8 7]
[11 16 15 6]
[12 13 14 5]
[1 2 3 4]
我已尝试使用此代码进行对方矩阵
import numpy as np
n=4
M = np.zeros([n,n])
init = 0
nlimit = n-1
c = 0
if (n%2==0):
while (c<=(n*n)):
for i in range(init,nlimit,1):
c=c+1
M[nlimit,i] = c
for i in range(nlimit-1,init,-1):
c=c+1
M[i,nlimit] = c
for i in range(nlimit-1,init,-1):
c=c+1
M[init,i] = c
for i in range(init,nlimit-1,1):
c=c+1
M[i,init] = c
init = init + 1
nlimit = nlimit - 1
print(M)
但是当我运行该程序时,它仍然会加载很长时间并且从不做某些事情,它不会向我显示错误,但它什么都不做。
我不知道我的错误是什么,请帮助我。
再次感谢您
答案 0 :(得分:0)
你快到了。当您的计数器c
等于n*n
时,您会进入无限循环。 for
循环中的所有范围都变为空,c = c + 1
永远不再执行。
您需要将支票更改为c < (n*n)
和范围:
import numpy as np
n = 4
M = np.zeros([n, n])
init = 0
nlimit = n - 1
c = 0
if (n % 2 == 0):
while (c < (n*n)):
for i in range(init, nlimit, 1):
c = c + 1
M[nlimit, i] = c
for i in range(nlimit, init, -1):
c = c + 1
M[i, nlimit] = c
for i in range(nlimit, init, -1):
c = c + 1
M[init, i] = c
for i in range(init, nlimit, 1):
c = c + 1
M[i, init] = c
init = init + 1
nlimit = nlimit - 1
print(M)
输出:
[[ 10. 9. 8. 7.]
[ 11. 16. 15. 6.]
[ 12. 13. 14. 5.]
[ 1. 2. 3. 4.]]
作为奖励,您不需要为奇数更改太多。对于n=5
,它输出:
[[ 13. 12. 11. 10. 9.]
[ 14. 23. 22. 21. 8.]
[ 15. 24. 0. 20. 7.]
[ 16. 17. 18. 19. 6.]
[ 1. 2. 3. 4. 5.]]
您只需更改while c
并在中心添加最后一个号码:
import numpy as np
n = 5
M = np.zeros([n, n])
init = 0
nlimit = n - 1
c = 0
while c < (n * n) - 1:
for i in range(init, nlimit, 1):
c = c + 1
M[nlimit, i] = c
for i in range(nlimit, init, -1):
c = c + 1
M[i, nlimit] = c
for i in range(nlimit, init, -1):
c = c + 1
M[init, i] = c
for i in range(init, nlimit, 1):
c = c + 1
M[i, init] = c
init = init + 1
nlimit = nlimit - 1
M[(n - 1) // 2, (n - 1) // 2] = n * n
print(M)
现在输出:
[[ 13. 12. 11. 10. 9.]
[ 14. 23. 22. 21. 8.]
[ 15. 24. 25. 20. 7.]
[ 16. 17. 18. 19. 6.]
[ 1. 2. 3. 4. 5.]]