我想使用generic filter来计算给定窗口(或内核)中值的平均值,以满足几个条件的值。我期望以下代码在3层窗口中生成第一个数组的均值滤波器,使用另外两个数组来掩盖平均值计算中的值。
from scipy import ndimage
import numpy as np
#some test data
tstArr = np.random.rand(3,7,7)
tstArr = tstArr*10
tstArr = np.int_(tstArr)
tstArr[1] = tstArr[1]*100
tstArr[2] = tstArr[2] *1000
#mean function
def testFun(tstData,processLayer,nLayers,kernelSize):
funData= tstData.reshape((nLayers,kernelSize,kernelSize))
meanLayer = funData[processLayer]
maskedData = meanLayer[(funData[1]>1)&(funData[2]<9000)]
returnMean = np.mean(maskedData)
return returnMean
#number of layers in the array
nLayers = np.shape(tstArr)[0]
#window size
kernelSize = 5
#create a sampling window of 5x5 elements from each array
footprnt = np.ones((nLayers,kernelSize,kernelSize),dtype = np.int)
# calculate the mean of the first layer in the array (other two are for masking)
processLayer = 0
tstOut = ndimage.generic_filter(tstArr, testFun, footprint=footprnt, extra_arguments = (processLayer,nLayers,kernelSize))
我认为这会从输入数组的第一层产生一个7x7的掩码平均值数组。输出是一个3x7x7数组,我不明白这些值代表什么。我不确定如何生成“蒙面”均值滤波数组,或者如何将输出解释为给定。
答案 0 :(得分:0)
您的代码在3层窗口中生成第一个数组的均值过滤器,使用两个以上的数组来掩盖平均值计算中的值。您将在tstOut[1]
中找到结果。
发生了什么事?当您使用ndimage.generic_filter
形状tstArr
和(3, 7, 7)
致footprint=np.ones((3, 5, 5))
时,对于从0到2的所有i
,对于从0到0的所有j
6,对于从0到6的所有k
,testFun
被调用,tstArr
的子数据集中在(i, j, k)
且形状(3, 5, 5)
(数组被反映)在边界提供缺失值。)
最后:
tstOut[0]
是tstArr[0]
的平均过滤器,tstArr[0]
和tstArr[1]
为掩码tstOut[1]
是tstArr[0]
的平均过滤器,tstArr[1]
和tstArr[2]
为掩码tstOut[2]
是tstArr[1]
的平均过滤器,tstArr[2]
和tstArr[2]
为掩码同样,想要的结果在tstOut[1]
。
我希望这会对你有所帮助。