如何使用 scipy.ndimage.filters.generic_filter?

问题描述 投票:0回答:1

我正在尝试使用 scipy.ndimage.filters.generic_filter 来计算邻域的加权和。邻域在某些时候会发生变化,但目前我正在努力实现 3x3。 到目前为止,这就是我所在的位置:

def Func(a):
     a = np.reshape((3,3))
     weights = np.array([[0.5,.05,0.5],[0.5,1,0.5],[0.5,0.5,0.5]])
     a = np.multiply(a,weights)
     a = np.sum(a)
     return a

ndimage.filters.generic_filter(Array,Func,       
   footprint=np.ones((3,3)),mode='constant',cval=0.0,origin=0.0)

我从 ndimage 收到一个错误,提示“TypeError: a float is required”,但我不知道它指的是什么参数,它看起来与我见过的其他示例基本相同。

python-2.7 numpy scipy filtering ndimage
1个回答
6
投票

这对我有用。 代码有几个小问题:

import scipy.ndimage.filters
import numpy as np

Array = rand( 100,100 )

def Func(a):
    a = a.reshape((3,3))
    weights = np.array([[0.5,.05,0.5],[0.5,1,0.5],[0.5,0.5,0.5]])
    a = np.multiply(a,weights)
    a = np.sum(a)
    return a

out = scipy.ndimage.filters.generic_filter(Array,Func,footprint=np.ones((3,3)),mode='constant',cval=0.0,origin=0.0)

您的

a = np.reshape( (3,3) )
是不正确的。这就是你想要的吗?

[更新]

根据我们的讨论对此进行一些清理:

import scipy.ndimage.filters
import numpy as np

Array = rand( 100,100 )

def Func(a):
    return np.sum( a * r_[0.5,.05,0.5, 0.5,1,0.5, 0.5,0.5,0.5] )

out = scipy.ndimage.filters.generic_filter(Array,Func,footprint=np.ones((3,3)),mode='constant',cval=0.0,origin=0.0)
© www.soinside.com 2019 - 2024. All rights reserved.