Python Numpy中几个数组的元素乘法

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及更高版本一起运行!

Bre*_*arn 14

你的错是没有阅读文档:

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

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

  • 别管它.帮助过我 :) (3认同)
  • 那么,是否有任何选项可以在单个调用中乘以多个数组(在最新版本中),或者我们是否必须链接调用? (2认同)

tgy*_*tgy 9

对于任何遇到此问题的人,应用 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)

  • 该答案假设输入数组是一维的。对于多维输入数组,采用 np.prod(np.array(arrays), axis=0)) 效果更好。 (6认同)