2013-04-19 7 views
6

Codificando alcune routine della meccanica quantistica, ho scoperto un comportamento curioso di NumPy di ​​Python. Quando uso NumPy si moltiplica con più di due array, ottengo risultati errati. Nel seguente codice, devo scrivere:Moltiplicazione elementare di diversi array in Python Numpy

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

che produce il risultato corretto. Tuttavia, la mia formulazione iniziale era questa:

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

che non produce un messaggio di errore, ma il risultato sbagliato. Dov'è la mia colpa nel pensare che potrei dare tre matrici alla routine di moltiplicazione di Numpy?

Ecco il codice completo:

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) 

:: :: NOTA questo codice viene eseguito solo con NumPy 1.7.0 in alto!

risposta

13

Colpa tua è a non leggere the documentation:

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

multiply prende esattamente due array in input. Il terzo argomento opzionale è un array di output che può essere utilizzato per memorizzare il risultato. (Se non viene fornito, viene creato e restituito un nuovo array.) Quando hai superato tre array, il terzo array è stato sovrascritto con il prodotto dei primi due.

+0

ok, mio ​​male :-). dovrei rimuovere questo post o pensi che sia utile per gli altri? – seb

+1

lascia. mi ha aiutato :) – mrjrdnthms

Problemi correlati