【发布时间】:2017-09-24 08:43:36
【问题描述】:
我希望你做得很棒。
我需要你的帮助,我正在尝试做一些这样的矩阵
[2 3]
[7 5]
[17 19 23]
[13 2 3 ]
[11 7 5 ]
[17 19 23 29]
[13 2 3 31]
[11 7 5 37]
[53 47 43 41]
如您所见,这些矩阵由以蜗牛/螺旋形式有机化的素数组成。 我快到了。让我向你解释一下我做了什么。
首先,我制作了一个“基本矩阵”,就像一个 4x4 示例一样
[6 7 8 9]
[5 0 1 10]
[4 3 2 11]
[15 14 13 12]
其次,对于这个例子,我制作了一个由前 16 个素数组成的向量,没有 1。就这样
[ 2. 3. 5. 7. 11. 13. 17. 19. 23. 29. 31. 37. 41. 43. 47. 53.]
第三,我想替换矩阵中向量的元素,但这最后一步是我的问题
我已尝试使用此代码
n = input("enter the length of the matrix (maximum 12): ")
if (n <= 0):
print("please enter a positive integer")
elif (n > 0):
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
if (n % 2 != 0):
while (c < ((n*n)-1)):
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
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
init = init +1
nlimit = nlimit - 1
M[(n - 1)/2, (n - 1)/2] = n * n
R = (n*n)*np.ones([n,n])
T = R - M #T = base matrix
A = T
print(T)
q = 1
w=np.zeros(n*n)
w[0] = 2
for i in range(3,1000,2):
p = 0
for j in range (3,i+1,2):
if (i % j == 0):
p = p + 1
if (p == 1):
w[q] = i
q = q + 1
if (q == (n*n)):
break
print (w)
for k in range (0,n*n,1):
for m in range (0, n-1, 1):
for z in range (0, n-1, 1):
if (T[m,z] == k):
A[m,z] = w[k]
print(A)
我知道我的错误在 las 6 行,但我不知道是什么。 这个程序会告诉你三件事 1) 基础矩阵 2) 素数向量 3) 带素数的螺旋矩阵
对于 n=4,这是输出
[[ 6. 7. 8. 9.]
[ 5. 0. 1. 10.]
[ 4. 3. 2. 11.]
[ 15. 14. 13. 12.]]
[ 2. 3. 5. 7. 11. 13. 17. 19. 23. 29. 31. 37. 41. 43. 47. 53.]
[[ 17. 19. 23. 9.]
[ 43. 43. 19. 10.]
[ 37. 19. 43. 11.]
[ 15. 14. 13. 12.]]
如您所见,最后一个矩阵不正确。
我真的很需要你的帮助,希望你能做到,非常感谢。
【问题讨论】:
-
您是否打算接受任何问题的答案?