8

いくつかの量子力学ルーチンをコーディングして、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以降でのみ動作します!

4

3 に答える 3

16

ドキュメントを読んでいないのはあなたのせいです:

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

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

于 2013-04-19T07:30:56.953 に答える