11

基本的な関数を評価するために Python でいくつかのコードを記述します。いくつかの値を持つ 2 次元配列があり、それらの値のそれぞれに関数を適用して、新しい 2 次元配列を取得したいと考えています。

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

しかし、私が得るのはエラーメッセージだけです

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__'

助けてください。

4

3 に答える 3

26

括弧のペアを忘れたようです:

a = makeGrid(dim)

あなたが今持っているもの:

a = makeGrid

makeGrid関数を呼び出す代わりに、関数をエイリアスするだけです。次に、 にインデックスを付けようとすると、次aのようになります。

a[i]

関数にインデックスを付けようとしていますが、ブラケット表記でインデックスを付けるために必要な魔法のメソッドがありません。__getitem__

于 2012-12-10T17:53:41.913 に答える
5

他の人が言ったように、makeGrid を適切に呼び出す必要があります.... 参考までに、これは Python で見られるかなり一般的なエラーであり、一般的には、変数があなたが思っていた型ではないことを意味します (この場合、行列を期待していましたが、関数を取得しました)

TypeError: 'function' object has no attribute '__getitem__'
于 2012-12-10T17:57:17.100 に答える
3

を呼び出しているのではなくmakeGrid()、関数オブジェクト自体を に割り当てていますa

    a = makeGrid(dim) 
于 2012-12-10T17:54:40.523 に答える