2013-02-10 78 views
1

在numpy數組中取值的加權和的最簡單/最快的方法是什麼?numpy數組中相鄰值的加權和

實施例:用歐拉方法

length_l=10 
time_l=10 
u=zeros((length_l,length_l))# (x,y) 
u[:, 0]=1 
u[:,-1]=1 
print(u) 
def dStep(ALPHA=0.1): 
    for position,value in ndenumerate(u): 
     D2u= (u[position+(1,0)]-2*value+u[position+(-1, 0)])/(1**2) \ 
      +(u[position+(0,1)]-2*value+u[position+(0,-1)])/(1**2) 
     value+=ALPHA*D2u() 
while True: 
    dStep() 
    print(u) 

D2u求解熱方程應在兩個維度上的第二中心差。這將工作,如果我可以添加像(1,4)+(1,3)=(2,7)索引。不幸的是,python將它們添加爲(1,4)+(1,3)=(1,4,1,3)

注意的是,計算D2u相當於服用點積與此內核圍繞當前位置爲中心:

0, 1, 0 
1,-4, 1 
0, 1, 0 

是否可以將其矢量化的點積?

回答

3

我想你想要的東西,如:

import numpy as np 
from scipy.ndimage import convolve 

length_l = 10 
time_l = 10 
u = np.zeros((length_l, length_l))# (x,y) 
u[:, 0] = 1 
u[:, -1] = 1 

alpha = .1 
weights = np.array([[ 0, 1, 0], 
        [ 1, -4, 1], 
        [ 0, 1, 0]]) 

for i in range(5): 
    u += alpha * convolve(u, weights) 
    print(u) 

你可以通過做減少了一點:

weights = alpha * weights 
weights[1, 1] = weights[1, 1] + 1 

for i in range(5): 
    u = convolve(u, weights) 
    print(u) 
+0

嗯......我得到一個'ValueError異常:對象太深期望的數組 ' – Navin 2013-02-10 18:55:32

+0

你確定你從'scipy.ndimage'導入'convolve'嗎?我相信我之前已經看到了這個錯誤,並帶有1d版的convolve。 – 2013-02-10 19:07:22

+0

是的,切換到第二版修復它。 – Navin 2013-02-10 21:56:28