seb*_*seb 7 python numpy multiplication
编码一些量子力学例程,我发现了Python的NumPy的奇怪行为.当我使用NumPy乘以两个以上的数组时,我会得到错误的结果.在下面的代码中,我必须写:
f = np.multiply(rowH,colH)
A[row][col]=np.sum(np.multiply(f,w))
Run Code Online (Sandbox Code Playgroud)
这会产生正确的结果.但是,我最初的表述是这样的:
A[row][col]=np.sum(np.multiply(rowH, colH, w))
Run Code Online (Sandbox Code Playgroud)
它不会产生错误信息,但结果错误.我认为我可以将三个阵列赋予numpy的多重例程,我的错在哪里?
这是完整的代码:
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)
Run Code Online (Sandbox Code Playgroud)
:: NOTE ::此代码仅与NumPy 1.7.0及更高版本一起运行!
对于任何遇到此问题的人,应用 nnp.ndarray形状的逐元素乘法的最佳方法(d, )是首先将np.vstack它们应用np.prod到第一个轴上:
>>> import numpy as np
>>>
>>> arrays = [
... np.array([1, 2, 3]),
... np.array([5, 8, 2]),
... np.array([9, 2, 0]),
... ]
>>>
>>> print(np.prod(np.vstack(arrays), axis=0))
[45 32 0]
Run Code Online (Sandbox Code Playgroud)