2013-04-19 27 views
6

Mã hóa một số thường trình Cơ học lượng tử, tôi đã phát hiện ra một hành vi tò mò của NumPy của Python. Khi tôi sử dụng nhân của NumPy với nhiều hơn hai mảng, tôi nhận được kết quả bị lỗi. Trong mã bên dưới, tôi phải viết:Nhân số nguyên tử của một số mảng trong Python Numpy

f = np.multiply(rowH,colH) 
A[row][col]=np.sum(np.multiply(f,w)) 

tạo kết quả chính xác. Tuy nhiên, công thức ban đầu của tôi là:

A[row][col]=np.sum(np.multiply(rowH, colH, w)) 

không tạo ra thông báo lỗi nhưng kết quả sai. Đâu là lỗi của tôi trong suy nghĩ rằng tôi có thể đưa ra ba mảng để thường xuyên nhân của numpy?

Đây là mã đầy đủ:

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) 

:: Chú ý :: mã này chỉ chạy với NumPy 1.7.0 và cao hơn!

Trả lời

13

lỗi của bạn là trong không đọc the documentation:

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

multiply mất chính xác hai mảng đầu vào. Đối số thứ ba tùy chọn là một mảng đầu ra có thể được sử dụng để lưu trữ kết quả. (Nếu nó không được cung cấp, một mảng mới sẽ được tạo và trả về.) Khi bạn truyền ba mảng, mảng thứ ba được ghi đè bằng sản phẩm của hai mảng đầu tiên.

+0

ok, xấu của tôi :-). Tôi có nên xóa bài đăng này hay bạn nghĩ nó hữu ích cho người khác không? – seb

+1

để nguyên. đã giúp tôi :) – mrjrdnthms