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.

Original source

Related problems