8

在编写一些 Quantum Mechanics 例程时,我发现了 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及更高版本上运行!

4

3 回答 3

16

你的错在于没有阅读文档

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

multiply正好需要两个输入数组。可选的第三个参数是一个输出数组,可用于存储结果。(如果未提供,则创建并返回一个新数组。)当您传递三个数组时,第三个数组被前两个数组的乘积覆盖。

于 2013-04-19T07:30:56.953 回答
12

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]
于 2019-10-25T09:17:25.397 回答
2

是的!就像对 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]
于 2019-06-17T08:36:10.250 回答