违父母之命,弃安逸之生活。只身北漂,为我欲为。感谢在我成长中给我制造挫折的人。谢谢清华大学李瑞哥哥,虽一面之缘,仍念感激!喜欢编程,喜欢计算机的朋友,在此我写一个简单算法的例子,初始化一个 N*N 的矩阵,从左上角第一个元素顺时针填充数字,范围1~N^2
二维螺旋矩阵
示例代码如下
#-*- coding: utf-8 -*-
import numpy
def HelixMatrix(n):
if not isinstance(n,int) or n <= 1:
raise ValueError('please input a valid number!')
matrix = numpy.zeros((n,n))
start = 0
skip = n-1
number = 1
while start < skip:
# 当向右移动,横坐标不变,纵坐标+1,number+1
i = start
while i < skip:
matrix[start][i] = number
i += 1
number += 1
#print(matrix)
#当向下移动,纵坐标不变,横坐标+1,number+1
i = start
while i < skip:
matrix[i][skip] = number
i += 1
number += 1
#print(matrix)
#当向左移动,横坐标不变,纵坐标-1,number+1
i = skip
while i > start:
matrix[skip][i] = number
i -= 1
number += 1
#print(matrix)
#当向上移动,纵坐标不变,横坐标-1,number+1
i = skip
while i > start:
matrix[i][start] = number
i -= 1
number += 1
start += 1
skip -= 1
#当二位矩阵的维数为奇数,最中间也就是最后一个值为0的元的值应该赋值n*n
if n%2 != 0:
matrix[int((n-1)/2)][int((n-1)/2)] = n*n
return matrix
print (HelixMatrix(6))
运行结果如下:
[ 1. 2. 3. 4. 5. 6.]
[20. 21. 22. 23. 24. 7.]
[19. 32. 33. 34. 25. 8.]
[18. 31. 36. 35. 26. 9.]
[17. 30. 29. 28. 27. 10.]
[16. 15. 14. 13. 12. 11.]