我想通过获取原始值中最频繁的值(模式),对3d数组进行下采样。经过一些研究,我在skimage
库中找到了block_reduce
函数。例如,如果我想取块的平均值,我可以很容易地做到:
from skimage.measure import block_reduce
image = np.arange(4*4*4).reshape(4, 4, 4)
new_image = block_reduce(image, block_size=(2,2,2), func=np.mean, cval=np.mean(grades))
在我的例子中,我想把func参数传递给mode函数。但是,numpy没有模式函数。根据文档,传递的函数应该接受“axis”作为参数。我尝试了一些变通方法,比如编写自己的函数,组合np.unique
和np.argmax
,以及将scipy.stats.mode
作为函数传递。他们都失败了
我编写了一些嵌套for循环来实现这一点,但对于大型数组来说,它的速度太慢了。有没有一个简单的方法可以做到这一点?我不一定需要使用sci工具包图像库
先谢谢你
让我们先假设输入图像形状可被
block_size
整除,即相应的形状尺寸可被block_size
的每个尺寸参数整除因此,作为预处理,我们需要在输入
image
上做块,就像这样-接下来,对于} 和
mode
查找的具体情况,我们将使用^{argmax
-或者,我们可以使用^{} -
最后,如果整除性的初始假设不成立,我们需要使用适当的pad值进行填充。同样,我们可以使用
np.pad
,作为blockify
方法的一部分相关问题 更多 >
编程相关推荐