2013-04-19 10 views
6

量子力学のルーチンをコーディングすると、私はPythonのNumPyの興味深い動作を発見しました。 2つ以上の配列でNumPyの乗算を使用すると、結果が正しくありません。以下のコードでは、私は正しい結果を生成する:Pythonのいくつかの配列の要素的な乗算Numpy

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

を書く必要があります。しかし、私の最初の処方はこれでした:

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

これはエラーメッセージを生成しませんが、間違った結果です。私がnumpyの乗算ルーチンに3つの配列を与えることができると思うのはどこですか?

はここで完全なコードです:

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) 

:: NOTE ::このコードは唯一numpyの1.7.0以降で動作します!

答えて

13

あなたのせいではthe documentationを読んでいないです。

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

multiplyはちょうど二つの入力配列を取ります。オプションの第3引数は、結果を格納するために使用できる出力配列です。 (指定されていない場合は、新しい配列が作成され、返されます。)3つの配列を渡したとき、3つ目の配列は最初の2つの積で上書きされます。

+0

ok、私の悪い:-)。この投稿を削除する必要がありますか、それとも他のユーザーにとって役立つと思いますか? – seb

+1

それを残す。助けて頂きました :) – mrjrdnthms

関連する問題