Viết một số mã trong python để đánh giá một hàm cơ bản. Tôi đã có một mảng 2ngày với một số giá trị và tôi muốn áp dụng các chức năng để mỗi người trong số những giá trị và có được một mảng 2ngày mới:LoạiError: đối tượng 'function' không có thuộc tính '__getitem__'
import numpy as N
def makeGrid(dim):
''' Function to return a grid of distances from the centre of an array.
This version uses loops to fill the array and is thus slow.'''
tabx = N.arange(dim) - float(dim/2.0) + 0.5
taby = N.arange(dim) - float(dim/2.0) + 0.5
grid = N.zeros((dim,dim), dtype='float')
for y in range(dim):
for x in range(dim):
grid[y,x] = N.sqrt(tabx[x]**2 + taby[y]**2)
return grid
import math
def BigGrid(dim):
l= float(raw_input('Enter a value for lambda: '))
p= float(raw_input('Enter a value for phi: '))
a = makeGrid
b= N.zeros ((10,10),dtype=float) #Create an array to take the returned values
for i in range(10):
for j in range (10):
b[i][j] = a[i][j]*l*p
return b
if __name__ == "__main__":
''' Module test code '''
size = 10 #Dimension of the array
newGrid = BigGrid(size)
newGrid = N.round(newGrid, decimals=2)
print newGrid
Nhưng tất cả tôi nhận được là thông báo lỗi
Traceback (most recent call last):
File "sim.py", line 31, in <module>
newGrid = BigGrid(size)
File "sim.py", line 24, in BigGrid
b[i][j] = a[i][j]*l*p
TypeError: 'function' object has no attribute '__getitem__'
Vui lòng trợ giúp.
nhận xét về mã numpy của bạn: 1) cố gắng 'nhập numpy như np', như tha t là quy ước numpy. 2) Sử dụng các phép toán vectơ, ví dụ: 'a = b * l * p' thay vì vòng lặp kép. Nó sẽ nhanh hơn hàng trăm hoặc hàng nghìn lần và dễ đọc hơn. 3) Không lập chỉ mục mảng numpy như 'mảng [i] [j]', sử dụng nó thay vì 'mảng [i, j]' nó nhanh hơn nhiều, và viết ngắn hơn;). Để tóm tắt, hãy đọc hướng dẫn gọn gàng. – jorgeca