编写了一些量子力学例程,我发现了Python的NumPy的奇怪行为。当我使用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的多重例程,我的错在哪里?
以下是完整代码:
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 及更高版本运行!
答案 0 :(得分:14)
你的错误在于没有阅读the documentation:
numpy.multiply(x1, x2[, out])
multiply
只需要两个输入数组。可选的第三个参数是一个输出数组,可用于存储结果。 (如果没有提供,则会创建并返回一个新数组。)当您传递三个数组时,第三个数组被前两个数组覆盖。
答案 1 :(得分:0)
是的!就像对np.arrays做*
import numpy as np
a=np.array([2,9,4])
b=np.array([3,4,5])
c=np.array([10,5,8])
d=a*b*c
print(d)
产品:
[ 60 180 160]
答案 2 :(得分:0)
对于任何对此绊脚石的人,应用形状为np.ndarray
的n (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]