2013-04-19 20 views
6

Kodowanie niektórych procedur mechaniki kwantowej, odkryłem ciekawe zachowanie NumPy Pythona. Kiedy używam NumPy's z więcej niż dwoma tablicami, otrzymuję błędne wyniki. W poniższym kodzie muszę napisać:Mnożenie elementarne kilku macierzy w Pythonie Numpy

f = np.multiply(rowH,colH) 
A[row][col]=np.sum(np.multiply(f,w)) 

, która daje prawidłowy wynik. Jednak moje początkowe sformułowanie było następujące:

A[row][col]=np.sum(np.multiply(rowH, colH, w)) 

, które nie generuje komunikatu o błędzie, ale jest błędny. Gdzie moja wina w myśleniu, że mógłbym podać trzy tablice do rutynowego mnożenia numpy?

Oto pełny kod:

from numpy.polynomial.hermite import Hermite, hermgauss 
import numpy as np 
import matplotlib.pyplot as plt 

dim = 3 
x,w = hermgauss(dim) 
A = np.zeros((dim, dim)) 
#build matrix 
for row in range(0, dim): 
    rowH = Hermite.basis(row)(x) 
    for col in range(0, dim): 
     colH = Hermite.basis(col)(x) 
     #gaussian quadrature in vectorized form 
     f = np.multiply(rowH,colH) 
     A[row][col]=np.sum(np.multiply(f,w)) 
print(A) 

:: UWAGA :: ten kod działa tylko z NumPy 1.7.0 i wyżej!

Odpowiedz

13

twoja wina jest nie czyta the documentation:

numpy.multiply(x1, x2[, out])

multiply zajmuje dokładnie dwa tablic wejściowych. Opcjonalny trzeci argument jest tablicą wyjściową, której można użyć do zapisania wyniku. (Jeśli nie zostanie podany, zostanie utworzona i zwrócona nowa tablica). Po przejściu przez trzy tablice trzecia tablica została nadpisana przez produkt dwóch pierwszych.

+0

ok, mój zły :-). czy powinienem usunąć ten post, czy uważasz, że jest on przydatny dla innych? – seb

+1

zostaw to. pomogło mi :) – mrjrdnthms