4

ndimageを学習しようとしていますが、generic_filter()関数がどのように機能するか理解できません。ドキュメントには、ユーザー関数がユーザー定義のフットプリントに適用されると記載されていますが、どういうわけか私はそれを行うことができません。次に例を示します。

>>> import numpy as np
>>> from scipy import ndimage
>>> im = np.ones((20, 20)) * np.arange(20)
>>> footprint = np.array([[0,0,1],
...                       [0,0,0],
...                       [1,0,0]])
... 
>>> def test(x):
...     return x * 0.5
... 
>>> res = ndimage.generic_filter(im, test, footprint=footprint)
Traceback (most recent call last):
  File "<Engine input>", line 1, in <module>
  File "C:\Python27\lib\site-packages\scipy\ndimage\filters.py", line 1142, in generic_filter
    cval, origins, extra_arguments, extra_keywords)
TypeError: only length-1 arrays can be converted to Python scalars

x関数に渡される値は、各配列サンプルの真のフットプリントに隣接する要素であると予想したtest()ため、この例では、形状(2、)の配列ですが、上記のエラーが発生します。

私は何が間違っているのですか?
指定された隣接点に単純な値の計算を適用するようにジェネリックフィルターに指示するにはどうすればよいですか?

4

1 に答える 1

7

に渡される関数はndimage.generic_filter、配列をスカラーにマップする必要があります。配列は 1 次元になり、imによって「選択」された値が含まれますfootprint

の各位置についてres、関数によって返される値は、その位置に割り当てられた値です。そのため、当然、関数はスカラーを返す必要があります。

たとえば、

def test(x):
    return (x*0.5).sum()

動作します。

于 2012-12-27T19:18:24.123 に答える