Rolling stats... The 3x3 moving/sliding/rolling window.. This kernel type will focus on returning statistics like your FocalStatistics functions... but without needing the Spatial Analyst extension...
They are used ....
And there are other uses....
First the results.
a <SPAN class="comment token"># ---- A grid/raster/array ----</SPAN>
array<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">5</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">1</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">2</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">0</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">7</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">3</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">2</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">2</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">9</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">9</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">6</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">9</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">2</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">1</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">3</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="number token">7</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">2</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">7</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">3</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">7</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">7</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">7</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="number token">3</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">9</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">6</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">8</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">0</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">1</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">8</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">0</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">7</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="number token">8</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">6</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">8</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">1</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">9</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">6</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">9</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="number token">3</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">9</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">9</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">3</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">1</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">2</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">3</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">2</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">0</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">9</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">7</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">9</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">9</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">3</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">7</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">7</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">8</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">3</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="number token">5</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">2</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">3</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">6</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">2</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">7</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">2</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="number token">4</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">6</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">9</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">8</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">6</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">8</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">6</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">2</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN>
a_s <SPAN class="operator token">=</SPAN> stride<SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">,</SPAN> r_c<SPAN class="operator token">=</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="number token">3</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="number token">3</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># ---- create an array of rolling windows 3x3 ----</SPAN>
<SPAN class="comment token"># ---- Now calculate all the statistics --------------------------------------</SPAN>
rolling_stats<SPAN class="punctuation token">(</SPAN>a_s<SPAN class="punctuation token">,</SPAN> no_null<SPAN class="operator token">=</SPAN><SPAN class="token boolean">False</SPAN><SPAN class="punctuation token">,</SPAN> prn<SPAN class="operator token">=</SPAN><SPAN class="token boolean">True</SPAN><SPAN class="punctuation token">)</SPAN>
Min<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="number token">2</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="number token">2</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="number token">3</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">3</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="number token">2</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">3</SPAN> <SPAN class="number token">3</SPAN> <SPAN class="number token">3</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">]</SPAN>
Max<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">7</SPAN> <SPAN class="number token">7</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">8</SPAN> <SPAN class="number token">7</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">8</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="number token">5</SPAN> <SPAN class="number token">5</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="number token">6</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">9</SPAN> <SPAN class="number token">8</SPAN> <SPAN class="number token">8</SPAN> <SPAN class="number token">8</SPAN> <SPAN class="number token">8</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">]</SPAN>
Mean<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">[</SPAN> <SPAN class="number token">4.44</SPAN> <SPAN class="number token">4.33</SPAN> <SPAN class="number token">5.11</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">4.89</SPAN> <SPAN class="number token">4.44</SPAN> <SPAN class="number token">3.89</SPAN> <SPAN class="number token">3.56</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN> <SPAN class="number token">5.56</SPAN> <SPAN class="number token">6.56</SPAN> <SPAN class="number token">5.89</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">4.11</SPAN> <SPAN class="number token">4.44</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">4.11</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN> <SPAN class="number token">5.78</SPAN> <SPAN class="number token">6</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">4.89</SPAN> <SPAN class="number token">4.33</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">5.78</SPAN> <SPAN class="number token">5.56</SPAN> <SPAN class="number token">5.78</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN> <SPAN class="number token">6.33</SPAN> <SPAN class="number token">7.11</SPAN> <SPAN class="number token">5.11</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">3.78</SPAN> <SPAN class="number token">5.44</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">4.56</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN> <SPAN class="number token">5.11</SPAN> <SPAN class="number token">5.33</SPAN> <SPAN class="number token">4.78</SPAN> <SPAN class="number token">4.44</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">6.11</SPAN> <SPAN class="number token">6.33</SPAN> <SPAN class="number token">5.22</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN> <SPAN class="number token">4.44</SPAN> <SPAN class="number token">4.89</SPAN> <SPAN class="number token">4.44</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">5.11</SPAN> <SPAN class="number token">5.89</SPAN> <SPAN class="number token">6.11</SPAN> <SPAN class="number token">4.89</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN> <SPAN class="number token">3.33</SPAN> <SPAN class="number token">3.56</SPAN> <SPAN class="number token">3.89</SPAN> <SPAN class="number token">4.56</SPAN> <SPAN class="number token">5.67</SPAN> <SPAN class="number token">6.11</SPAN> <SPAN class="number token">6.33</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN> <SPAN class="number token">4.11</SPAN> <SPAN class="number token">4.89</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">5.67</SPAN> <SPAN class="number token">5.89</SPAN> <SPAN class="number token">6.11</SPAN> <SPAN class="number token">5.33</SPAN> <SPAN class="number token">3.89</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">]</SPAN>
Med<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">[</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">3</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">3</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN> <SPAN class="number token">6</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">7</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">6</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">3</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN> <SPAN class="number token">6</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">6</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">6</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">6</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">6</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">7</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN> <SPAN class="number token">6</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">8</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">6</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">3</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">3</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">6</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">6</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">7</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">7</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">6</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">7</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">7</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">6</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">6</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">6</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">6</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">3</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">]</SPAN>
Sum<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">40</SPAN> <SPAN class="number token">39</SPAN> <SPAN class="number token">46</SPAN> <SPAN class="number token">45</SPAN> <SPAN class="number token">44</SPAN> <SPAN class="number token">40</SPAN> <SPAN class="number token">35</SPAN> <SPAN class="number token">32</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="number token">50</SPAN> <SPAN class="number token">59</SPAN> <SPAN class="number token">53</SPAN> <SPAN class="number token">45</SPAN> <SPAN class="number token">37</SPAN> <SPAN class="number token">40</SPAN> <SPAN class="number token">36</SPAN> <SPAN class="number token">37</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="number token">52</SPAN> <SPAN class="number token">54</SPAN> <SPAN class="number token">44</SPAN> <SPAN class="number token">39</SPAN> <SPAN class="number token">36</SPAN> <SPAN class="number token">52</SPAN> <SPAN class="number token">50</SPAN> <SPAN class="number token">52</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="number token">57</SPAN> <SPAN class="number token">64</SPAN> <SPAN class="number token">46</SPAN> <SPAN class="number token">36</SPAN> <SPAN class="number token">34</SPAN> <SPAN class="number token">49</SPAN> <SPAN class="number token">45</SPAN> <SPAN class="number token">41</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="number token">46</SPAN> <SPAN class="number token">48</SPAN> <SPAN class="number token">43</SPAN> <SPAN class="number token">40</SPAN> <SPAN class="number token">45</SPAN> <SPAN class="number token">55</SPAN> <SPAN class="number token">57</SPAN> <SPAN class="number token">47</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="number token">40</SPAN> <SPAN class="number token">44</SPAN> <SPAN class="number token">40</SPAN> <SPAN class="number token">36</SPAN> <SPAN class="number token">46</SPAN> <SPAN class="number token">53</SPAN> <SPAN class="number token">55</SPAN> <SPAN class="number token">44</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="number token">30</SPAN> <SPAN class="number token">32</SPAN> <SPAN class="number token">35</SPAN> <SPAN class="number token">41</SPAN> <SPAN class="number token">51</SPAN> <SPAN class="number token">55</SPAN> <SPAN class="number token">57</SPAN> <SPAN class="number token">45</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="number token">37</SPAN> <SPAN class="number token">44</SPAN> <SPAN class="number token">45</SPAN> <SPAN class="number token">51</SPAN> <SPAN class="number token">53</SPAN> <SPAN class="number token">55</SPAN> <SPAN class="number token">48</SPAN> <SPAN class="number token">35</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">]</SPAN>
Std<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">[</SPAN> <SPAN class="number token">2.67</SPAN> <SPAN class="number token">3.2</SPAN> <SPAN class="number token">2.85</SPAN> <SPAN class="number token">2.62</SPAN> <SPAN class="number token">2.02</SPAN> <SPAN class="number token">2.5</SPAN> <SPAN class="number token">2.28</SPAN> <SPAN class="number token">2.59</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN> <SPAN class="number token">2.59</SPAN> <SPAN class="number token">2.36</SPAN> <SPAN class="number token">2.73</SPAN> <SPAN class="number token">3.09</SPAN> <SPAN class="number token">2.88</SPAN> <SPAN class="number token">2.83</SPAN> <SPAN class="number token">2.71</SPAN> <SPAN class="number token">2.96</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN> <SPAN class="number token">2.2</SPAN> <SPAN class="number token">2.16</SPAN> <SPAN class="number token">2.73</SPAN> <SPAN class="number token">3.16</SPAN> <SPAN class="number token">2.98</SPAN> <SPAN class="number token">2.62</SPAN> <SPAN class="number token">2.59</SPAN> <SPAN class="number token">2.39</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN> <SPAN class="number token">2.4</SPAN> <SPAN class="number token">1.79</SPAN> <SPAN class="number token">3</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">3.37</SPAN> <SPAN class="number token">3.15</SPAN> <SPAN class="number token">2.83</SPAN> <SPAN class="number token">2.58</SPAN> <SPAN class="number token">2.5</SPAN> <SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN> <SPAN class="number token">3</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">2.91</SPAN> <SPAN class="number token">3.26</SPAN> <SPAN class="number token">3.34</SPAN> <SPAN class="number token">2.87</SPAN> <SPAN class="number token">2.56</SPAN> <SPAN class="number token">2.26</SPAN> <SPAN class="number token">3.08</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN> <SPAN class="number token">2.91</SPAN> <SPAN class="number token">2.73</SPAN> <SPAN class="number token">2.83</SPAN> <SPAN class="number token">2.62</SPAN> <SPAN class="number token">2.42</SPAN> <SPAN class="number token">2.28</SPAN> <SPAN class="number token">2.38</SPAN> <SPAN class="number token">3.03</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN> <SPAN class="number token">1.76</SPAN> <SPAN class="number token">1.71</SPAN> <SPAN class="number token">2.33</SPAN> <SPAN class="number token">2.45</SPAN> <SPAN class="number token">1.94</SPAN> <SPAN class="number token">2.02</SPAN> <SPAN class="number token">2.36</SPAN> <SPAN class="number token">3.2</SPAN> <SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN> <SPAN class="number token">1.29</SPAN> <SPAN class="number token">1.79</SPAN> <SPAN class="number token">2</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">2</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">1.79</SPAN> <SPAN class="number token">1.73</SPAN> <SPAN class="number token">2.31</SPAN> <SPAN class="number token">2.56</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">]</SPAN>
Var<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN>
<SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">[</SPAN> <SPAN class="number token">7.14</SPAN> <SPAN class="number token">10.22</SPAN> <SPAN class="number token">8.1</SPAN> <SPAN class="number token">6.89</SPAN> <SPAN class="number token">4.1</SPAN> <SPAN class="number token">6.25</SPAN> <SPAN class="number token">5.21</SPAN> <SPAN class="number token">6.69</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN> <SPAN class="number token">6.69</SPAN> <SPAN class="number token">5.58</SPAN> <SPAN class="number token">7.43</SPAN> <SPAN class="number token">9.56</SPAN> <SPAN class="number token">8.32</SPAN> <SPAN class="number token">8.02</SPAN> <SPAN class="number token">7.33</SPAN> <SPAN class="number token">8.77</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN> <SPAN class="number token">4.84</SPAN> <SPAN class="number token">4.67</SPAN> <SPAN class="number token">7.43</SPAN> <SPAN class="number token">10</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">8.89</SPAN> <SPAN class="number token">6.84</SPAN> <SPAN class="number token">6.69</SPAN> <SPAN class="number token">5.73</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN> <SPAN class="number token">5.78</SPAN> <SPAN class="number token">3.21</SPAN> <SPAN class="number token">8.99</SPAN> <SPAN class="number token">11.33</SPAN> <SPAN class="number token">9.95</SPAN> <SPAN class="number token">8.02</SPAN> <SPAN class="number token">6.67</SPAN> <SPAN class="number token">6.25</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN> <SPAN class="number token">8.99</SPAN> <SPAN class="number token">8.44</SPAN> <SPAN class="number token">10.62</SPAN> <SPAN class="number token">11.14</SPAN> <SPAN class="number token">8.22</SPAN> <SPAN class="number token">6.54</SPAN> <SPAN class="number token">5.11</SPAN> <SPAN class="number token">9.51</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN> <SPAN class="number token">8.47</SPAN> <SPAN class="number token">7.43</SPAN> <SPAN class="number token">8.02</SPAN> <SPAN class="number token">6.89</SPAN> <SPAN class="number token">5.88</SPAN> <SPAN class="number token">5.21</SPAN> <SPAN class="number token">5.65</SPAN> <SPAN class="number token">9.21</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN> <SPAN class="number token">3.11</SPAN> <SPAN class="number token">2.91</SPAN> <SPAN class="number token">5.43</SPAN> <SPAN class="number token">6.02</SPAN> <SPAN class="number token">3.78</SPAN> <SPAN class="number token">4.1</SPAN> <SPAN class="number token">5.56</SPAN> <SPAN class="number token">10.22</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">[</SPAN> <SPAN class="number token">1.65</SPAN> <SPAN class="number token">3.21</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">3.21</SPAN> <SPAN class="number token">2.99</SPAN> <SPAN class="number token">5.33</SPAN> <SPAN class="number token">6.54</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">]</SPAN>
Range
<SPAN class="comment token"># ---- If you have nodata values, they can be accommodated ------------------</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
Now the code functions
<SPAN class="keyword token">import</SPAN> numpy <SPAN class="keyword token">as</SPAN> np
<SPAN class="keyword token">from</SPAN> numpy<SPAN class="punctuation token">.</SPAN>lib<SPAN class="punctuation token">.</SPAN>stride_tricks <SPAN class="keyword token">import</SPAN> as_strided
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">_check</SPAN><SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">,</SPAN> r_c<SPAN class="punctuation token">,</SPAN> subok<SPAN class="operator token">=</SPAN><SPAN class="token boolean">False</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="string token">"""Performs the array checks necessary for stride and block.
: a - Array or list.
: r_c - tuple/list/array of rows x cols.
: subok - from numpy 1.12 added, keep for now
:Returns:
:------
:Attempts will be made to ...
: produce a shape at least (1*c). For a scalar, the
: minimum shape will be (1*r) for 1D array or (1*c) for 2D
: array if r<c. Be aware
"""</SPAN>
<SPAN class="keyword token">if</SPAN> isinstance<SPAN class="punctuation token">(</SPAN>r_c<SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">(</SPAN>int<SPAN class="punctuation token">,</SPAN> float<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
r_c <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">,</SPAN> int<SPAN class="punctuation token">(</SPAN>r_c<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
r<SPAN class="punctuation token">,</SPAN> c <SPAN class="operator token">=</SPAN> r_c
<SPAN class="keyword token">if</SPAN> a<SPAN class="punctuation token">.</SPAN>ndim <SPAN class="operator token">==</SPAN> <SPAN class="number token">1</SPAN><SPAN class="punctuation token">:</SPAN>
a <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>atleast_2d<SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">)</SPAN>
r<SPAN class="punctuation token">,</SPAN> c <SPAN class="operator token">=</SPAN> r_c <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">(</SPAN>min<SPAN class="punctuation token">(</SPAN>r<SPAN class="punctuation token">,</SPAN> a<SPAN class="punctuation token">.</SPAN>shape<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> min<SPAN class="punctuation token">(</SPAN>c<SPAN class="punctuation token">,</SPAN> a<SPAN class="punctuation token">.</SPAN>shape<SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
a <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>array<SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">,</SPAN> copy<SPAN class="operator token">=</SPAN><SPAN class="token boolean">False</SPAN><SPAN class="punctuation token">,</SPAN> subok<SPAN class="operator token">=</SPAN>subok<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">return</SPAN> a<SPAN class="punctuation token">,</SPAN> r<SPAN class="punctuation token">,</SPAN> c<SPAN class="punctuation token">,</SPAN> tuple<SPAN class="punctuation token">(</SPAN>r_c<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">_pad</SPAN><SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">,</SPAN> nan_edge<SPAN class="operator token">=</SPAN><SPAN class="token boolean">False</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="string token">"""Pad a sliding array to allow for stats"""</SPAN>
<SPAN class="keyword token">if</SPAN> nan_edge<SPAN class="punctuation token">:</SPAN>
a <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>pad<SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">,</SPAN> pad_width<SPAN class="operator token">=</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">2</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> mode<SPAN class="operator token">=</SPAN><SPAN class="string token">"constant"</SPAN><SPAN class="punctuation token">,</SPAN>
constant_values<SPAN class="operator token">=</SPAN><SPAN class="punctuation token">(</SPAN>np<SPAN class="punctuation token">.</SPAN>NaN<SPAN class="punctuation token">,</SPAN> np<SPAN class="punctuation token">.</SPAN>NaN<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">else</SPAN><SPAN class="punctuation token">:</SPAN>
a <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>pad<SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">,</SPAN> pad_width<SPAN class="operator token">=</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">1</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> mode<SPAN class="operator token">=</SPAN><SPAN class="string token">"reflect"</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">return</SPAN> a
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">stride</SPAN><SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">,</SPAN> r_c<SPAN class="operator token">=</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="number token">3</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">3</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="string token">"""Provide a 2D sliding/moving view of an array.
: There is no edge correction for outputs.
:
:Requires:
:--------
: _check(a, r_c) ... Runs the checks on the inputs.
: a - array or list, usually a 2D array. Assumes rows is >=1,
: it is corrected as is the number of columns.
: r_c - tuple/list/array of rows x cols. Attempts to
: produce a shape at least (1*c). For a scalar, the
: minimum shape will be (1*r) for 1D array or 2D
: array if r<c. Be aware
"""</SPAN>
a<SPAN class="punctuation token">,</SPAN> r<SPAN class="punctuation token">,</SPAN> c<SPAN class="punctuation token">,</SPAN> r_c <SPAN class="operator token">=</SPAN> _check<SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">,</SPAN> r_c<SPAN class="punctuation token">)</SPAN>
shape <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">.</SPAN>shape<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="operator token">-</SPAN> r <SPAN class="operator token">+</SPAN> <SPAN class="number token">1</SPAN><SPAN class="punctuation token">,</SPAN> a<SPAN class="punctuation token">.</SPAN>shape<SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="operator token">-</SPAN> c <SPAN class="operator token">+</SPAN> <SPAN class="number token">1</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">+</SPAN> r_c
strides <SPAN class="operator token">=</SPAN> a<SPAN class="punctuation token">.</SPAN>strides <SPAN class="operator token">*</SPAN> <SPAN class="number token">2</SPAN>
a_s <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">(</SPAN>as_strided<SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">,</SPAN> shape<SPAN class="operator token">=</SPAN>shape<SPAN class="punctuation token">,</SPAN> strides<SPAN class="operator token">=</SPAN>strides<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN>squeeze<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">return</SPAN> a_s
<SPAN class="comment token"># ----------------------------------------------------------------------</SPAN>
<SPAN class="comment token"># (18) rolling stats .... code section</SPAN>
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">rolling_stats</SPAN><SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">,</SPAN> no_null<SPAN class="operator token">=</SPAN><SPAN class="token boolean">True</SPAN><SPAN class="punctuation token">,</SPAN> prn<SPAN class="operator token">=</SPAN><SPAN class="token boolean">True</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="string token">"""Statistics on the last two dimensions of an array.
:Requires
:--------
: a - 2D array **Note, use 'stride' above to obtain rolling stats
: no_null - boolean, whether to use masked values (nan) or not.
: prn - boolean, to print the results or return the values.
:
:Returns
:-------
: The results return an array of 4 dimensions representing the original
: array size and block size
: eg. original = 6x6 array block = 3x3
: breaking the array into 4 chunks
"""</SPAN>
a <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>asarray<SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">)</SPAN>
a <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>atleast_2d<SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">)</SPAN>
ax <SPAN class="operator token">=</SPAN> None
<SPAN class="keyword token">if</SPAN> a<SPAN class="punctuation token">.</SPAN>ndim <SPAN class="operator token">></SPAN> <SPAN class="number token">1</SPAN><SPAN class="punctuation token">:</SPAN>
ax <SPAN class="operator token">=</SPAN> tuple<SPAN class="punctuation token">(</SPAN>np<SPAN class="punctuation token">.</SPAN>arange<SPAN class="punctuation token">(</SPAN>len<SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">.</SPAN>shape<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="operator token">-</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">if</SPAN> no_null<SPAN class="punctuation token">:</SPAN>
a_min <SPAN class="operator token">=</SPAN> a<SPAN class="punctuation token">.</SPAN>min<SPAN class="punctuation token">(</SPAN>axis<SPAN class="operator token">=</SPAN>ax<SPAN class="punctuation token">)</SPAN>
a_max <SPAN class="operator token">=</SPAN> a<SPAN class="punctuation token">.</SPAN>max<SPAN class="punctuation token">(</SPAN>axis<SPAN class="operator token">=</SPAN>ax<SPAN class="punctuation token">)</SPAN>
a_mean <SPAN class="operator token">=</SPAN> a<SPAN class="punctuation token">.</SPAN>mean<SPAN class="punctuation token">(</SPAN>axis<SPAN class="operator token">=</SPAN>ax<SPAN class="punctuation token">)</SPAN>
a_med <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>median<SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">,</SPAN> axis<SPAN class="operator token">=</SPAN>ax<SPAN class="punctuation token">)</SPAN>
a_sum <SPAN class="operator token">=</SPAN> a<SPAN class="punctuation token">.</SPAN>sum<SPAN class="punctuation token">(</SPAN>axis<SPAN class="operator token">=</SPAN>ax<SPAN class="punctuation token">)</SPAN>
a_std <SPAN class="operator token">=</SPAN> a<SPAN class="punctuation token">.</SPAN>std<SPAN class="punctuation token">(</SPAN>axis<SPAN class="operator token">=</SPAN>ax<SPAN class="punctuation token">)</SPAN>
a_var <SPAN class="operator token">=</SPAN> a<SPAN class="punctuation token">.</SPAN>var<SPAN class="punctuation token">(</SPAN>axis<SPAN class="operator token">=</SPAN>ax<SPAN class="punctuation token">)</SPAN>
a_ptp <SPAN class="operator token">=</SPAN> a_max <SPAN class="operator token">-</SPAN> a_min
<SPAN class="keyword token">else</SPAN><SPAN class="punctuation token">:</SPAN>
a_min <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>nanmin<SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">,</SPAN> axis<SPAN class="operator token">=</SPAN><SPAN class="punctuation token">(</SPAN>ax<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
a_max <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>nanmax<SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">,</SPAN> axis<SPAN class="operator token">=</SPAN><SPAN class="punctuation token">(</SPAN>ax<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
a_mean <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>nanmean<SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">,</SPAN> axis<SPAN class="operator token">=</SPAN><SPAN class="punctuation token">(</SPAN>ax<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
a_med <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>nanmedian<SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">,</SPAN> axis<SPAN class="operator token">=</SPAN><SPAN class="punctuation token">(</SPAN>ax<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
a_sum <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>nansum<SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">,</SPAN> axis<SPAN class="operator token">=</SPAN><SPAN class="punctuation token">(</SPAN>ax<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
a_std <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>nanstd<SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">,</SPAN> axis<SPAN class="operator token">=</SPAN><SPAN class="punctuation token">(</SPAN>ax<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
a_var <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>nanvar<SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">,</SPAN> axis<SPAN class="operator token">=</SPAN><SPAN class="punctuation token">(</SPAN>ax<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
a_ptp <SPAN class="operator token">=</SPAN> a_max <SPAN class="operator token">-</SPAN> a_min
<SPAN class="keyword token">if</SPAN> prn<SPAN class="punctuation token">:</SPAN>
s <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="string token">'Min'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'Max'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'Mean'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'Med'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'Sum'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'Std'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'Var'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'Range'</SPAN><SPAN class="punctuation token">]</SPAN>
frmt <SPAN class="operator token">=</SPAN> <SPAN class="string token">"...\n{}\n"</SPAN><SPAN class="punctuation token">.</SPAN>join<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">[</SPAN>i <SPAN class="keyword token">for</SPAN> i <SPAN class="keyword token">in</SPAN> s<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN>
v <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN>a_min<SPAN class="punctuation token">,</SPAN> a_max<SPAN class="punctuation token">,</SPAN> a_mean<SPAN class="punctuation token">,</SPAN> a_med<SPAN class="punctuation token">,</SPAN> a_sum<SPAN class="punctuation token">,</SPAN> a_std<SPAN class="punctuation token">,</SPAN> a_var<SPAN class="punctuation token">,</SPAN> a_ptp<SPAN class="punctuation token">]</SPAN>
args <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN>indent<SPAN class="punctuation token">(</SPAN>str<SPAN class="punctuation token">(</SPAN>i<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'... '</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">for</SPAN> i <SPAN class="keyword token">in</SPAN> v<SPAN class="punctuation token">]</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN>frmt<SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN><SPAN class="operator token">*</SPAN>args<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">else</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">return</SPAN> a_min<SPAN class="punctuation token">,</SPAN> a_max<SPAN class="punctuation token">,</SPAN> a_mean<SPAN class="punctuation token">,</SPAN> a_med<SPAN class="punctuation token">,</SPAN> a_sum<SPAN class="punctuation token">,</SPAN> a_std<SPAN class="punctuation token">,</SPAN> a_var<SPAN class="punctuation token">,</SPAN> a_ptp
<SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>