2013-04-19 3 views
6

Кодирование некоторых процедур квантовой механики, я обнаружил любопытное поведение NumPy Python. Когда я умножаю NumPy с более чем двумя массивами, я получаю ошибочные результаты. В приведенном ниже коде я должен написать:Элементное умножение нескольких массивов на Python 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) 

:: Примечание :: этот код работает только с NumPy 1.7.0 и выше!

ответ

13

Ваша вина в не читает the documentation:

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

multiply занимает ровно два входных массивов. Дополнительный третий аргумент - это выходной массив, который может использоваться для хранения результата. (Если он не указан, создается и возвращается новый массив.) Когда вы передали три массива, третий массив был перезаписан продуктом первых двух.

+0

ОК, мой плохой :-). следует ли удалить этот пост или вы считаете его полезным для других? – seb

+1

оставьте его. помог мне :) – mrjrdnthms

Смежные вопросы