我希望你做得很棒。
我需要你的帮助,我试图做一些这样的矩阵
[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)
我知道我的错误是在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.]]
正如您所看到的,最后一个矩阵是不对的。
我真的需要你的帮助,我希望你能做到,非常感谢你。
答案 0 :(得分:0)
你是对的,你快到了。
只需使用带有素数索引的预生成矩阵来访问素数向量(仅限最后几行):
for k in range(n):
for m in range(n):
idx = int(A[k,m])
A[k,m] = w[idx]
print(A)
预生成矩阵中的元素A[k,m]
是您想要的素数的索引。您需要将其转换为int
(来自float
)才能将其用于索引。
结果如您所愿:
[[ 17. 19. 23. 29.]
[ 13. 2. 3. 31.]
[ 11. 7. 5. 37.]
[ 53. 47. 43. 41.]]