いくつかの量子力学ルーチンをコーディングして、Python の NumPy の奇妙な動作を発見しました。3 つ以上の配列で 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)
::注::このコードはNumPy 1.7.0以降でのみ動作します!