双循环vs np.fromfunction(),为什么它们在我的情况下给出不同的结果?

时间:2018-03-26 15:39:10

标签: python numpy matplotlib

在尝试编程时,我需要从一个函数创建一个二维数组(矩阵),该函数将矩阵索引(下例中的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))

1 个答案:

答案 0 :(得分:0)

也许试试

return 0.0

在pomozna。