Python 如何应用ndimage.generic_filter()

Python 如何应用ndimage.generic_filter(),python,scipy,Python,Scipy,我试图学习ndimage,但我不知道函数是如何工作的。文档中提到,用户函数将应用于用户定义的封装外形,但不知何故,我无法做到这一点。下面是一个例子: >>> import numpy as np >>> from scipy import ndimage >>> im = np.ones((20, 20)) * np.arange(20) >>> footprint = np.array([[0,0,1], ...

我试图学习ndimage,但我不知道函数是如何工作的。文档中提到,用户函数将应用于用户定义的封装外形,但不知何故,我无法做到这一点。下面是一个例子:

>>> 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
>>将numpy作为np导入
>>>从scipy导入ndimage
>>>im=np.one((20,20))*np.arange(20)
>>>footprint=np.数组([[0,0,1],
...                       [0,0,0],
...                       [1,0,0]])
... 
>>>def测试(x):
...     返回x*0.5
... 
>>>res=ndimage.generic_过滤器(im、测试、封装外形=封装外形)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“C:\Python27\lib\site packages\scipy\ndimage\filters.py”,第1142行,通用过滤器
cval、来源、额外参数、额外关键字)
TypeError:只有长度为1的数组才能转换为Python标量
我希望传递给
test()
函数的
x
值是每个数组样本的真实封装外形相邻元素,因此在本例中,使用形状(2,)数组,但我得到了上述错误

我做错了什么?

如何告诉generic filter在指定的相邻点上应用简单值计算

传递给
ndimage.generic_filter
的函数必须将数组映射到标量。该数组将是一维的,包含
im
中的值,这些值已由
封装外形“选择”

对于
res
中的每个位置,函数返回的值是分配给该位置的值。这就是为什么函数需要返回标量的原因

那么比如说,

def test(x):
    return (x*0.5).sum()
会有用的