Quelle est la manière la plus simple/la plus rapide de prendre une somme pondérée de valeurs dans un tableau numpy?Somme pondérée des valeurs adjacentes dans le tableau numpy
Exemple: Résolution de l'équation de la chaleur avec la méthode d'Euler
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
devrait être la seconde différence centrale en deux dimensions. Cela fonctionnerait si je pouvais ajouter des index comme (1,4)+(1,3)=(2,7)
. Malheureusement, Python les ajoute comme (1,4)+(1,3)=(1,4,1,3)
.
Notez que le calcul du D2u
équivaut à prendre un produit scalaire avec ce noyau centré autour de la position actuelle:
0, 1, 0
1,-4, 1
0, 1, 0
peut-il être vectorisé comme un produit scalaire?
Hmm ... Je reçois un 'ValueError: objet trop profond pour le tableau désiré ' – Navin
Etes-vous sûr d'importer' convolve' de 'scipy.ndimage'? Je crois que j'ai déjà vu cette erreur avec la 1d-version de convolve. –
Oui, passer à la version nd l'a corrigé. – Navin