在尝试编程时,我需要从一个函数创建一个二维数组(矩阵),该函数将矩阵索引(下例中的i和j)作为参数并返回矩阵元素。
我从其他答案中看到numpy.fromfunction()和numpy.vectorize()应该可以解决这个问题,但在我的情况下,这两个似乎给出了不同的结果,可能是什么错误?
更具体地说,我正在比较这个:
for i in range(velikost):
for j in range(velikost):
u[i][j] = pomozna(i,j)
return u
到此(我认为这相当于上面的内容):
return np.fromfunction(np.vectorize(pomozna),u.shape)
以下是我的完整代码,如果您希望自己运行它。感谢任何帮助,谢谢!
import numpy as np
def jacobi(u,h,q):
velikost = u[0].size
star = np.copy(u)
def pomozna(i,j):
if i==0 or i==velikost-1 or j==0 or j==velikost-1:
return 0
return 1/4*(star[int(i+1)][int(j)]+star[int(i-1)][int(j)]+star[int(i)][int(j+1)]+star[int(i)][int(j-1)] - h*h*q[int(i)][int(j)])
#return np.fromfunction(np.vectorize(pomozna),u.shape)
for i in range(velikost):
for j in range(velikost):
u[i][j] = pomozna(i,j)
return u
h=0.05
iksi = np.linspace(0,1,int(1/h))
ipsiloni = np.linspace(0,1,int(1/h))
qji = [[-1 for iks in iksi] for ips in ipsiloni]
zacetna = np.asarray([[1.0 for iks in iksi] for ips in ipsiloni])
zacetna[0] = np.zeros(iksi.size)
zacetna[-1]=np.zeros(iksi.size)
zacetna[:,0] = np.zeros(iksi.size)
zacetna[:,-1] = np.zeros(iksi.size)
print(jacobi(zacetna,h,qji))
答案 0 :(得分:0)
也许试试
return 0.0
在pomozna。