TypeError: 'function' object has no attribute '__getitem__'
arrays, function, python
Solution
It appears you have forgotten a pair of parentheses:
a = makeGrid(dim)
What you have now:
a = makeGrid
just aliases the `makeGrid` function instead of calling it. Then, when you try to index into `a`, like so:
a[i]
it's trying to index into a function, which does not have the `__getitem__` magic method needed for indexing with bracket notation.
Problem
Writing some code in python to evaluate a basic function. I've got a 2d array with some values and I want to apply the function to each of those values and get a new 2-d array: ``` 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 ``` But all i get is the error message ``` 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__' ``` Please help.