擅长:python、mysql、java
<p>你可以试试Scipy,它有一个在数组上运行本地过滤器的函数。在</p>
<pre><code>from scipy import ndimage
outVariance = ndimage.generic_filter(data, np.var, size=3)
</code></pre>
<p>它有一个“mode=”关键字来表示边缘应该如何处理。在</p>
<p>编辑:</p>
<p>您可以自己测试,声明一个3x3数组:</p>
^{pr2}$
<p>对于3x3窗口,数组中心单元格的方差将简单地为:</p>
<pre><code>print np.var(a)
0.058884734425985602
</code></pre>
<p>该值应等于Scipy返回的数组的中心单元格:</p>
<pre><code>print ndimage.generic_filter(a, np.var, size=3)
print ndimage.generic_filter(a, np.var, size=(3,3))
print ndimage.generic_filter(a, np.var, footprint=np.ones((3,3)))
[[ 0.01127325 0.01465338 0.00959321]
[ 0.02001052 0.05888473 0.07897385]
[ 0.00978547 0.06966683 0.09633447]]
</code></pre>
<p>请注意,数组中的所有其他值都是“边值”,因此结果取决于Scipy如何处理边。它默认为<code>mode='reflect'</code>。在</p>
<p>有关详细信息,请参阅文档:
<a href="http://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.filters.generic_filter.html" rel="noreferrer">http://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.filters.generic_filter.html</a></p>