<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Pool of raster values to calculate percentile in Python Questions</title>
    <link>https://community.esri.com/t5/python-questions/pool-of-raster-values-to-calculate-percentile/m-p/197516#M15140</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks Dan. It actually gives the same results within the script so I think it should be fine.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Cheers&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 09 Nov 2015 09:25:40 GMT</pubDate>
    <dc:creator>anTonialcaraz</dc:creator>
    <dc:date>2015-11-09T09:25:40Z</dc:date>
    <item>
      <title>Pool of raster values to calculate percentile</title>
      <link>https://community.esri.com/t5/python-questions/pool-of-raster-values-to-calculate-percentile/m-p/197510#M15134</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi there,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I've been calculating percentiles out of monthly raster values, that is one month/raster at a time. I've been using the RasterToNumPyArray function and all good. Like this:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;array = arcpy.RasterToNumPyArray((raster),nodata_to_value=10000000000)

marray = numpy.ma.masked_values(array,10000000000)

per = 20

percentile_val = numpy.percentile(marray.compressed(),(per))

print percentile_val&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Now, I need to do the same but taking all 12 months into the percentile calculation. That is, using all cell values from all 12 rasters to calculate the percentile. Like putting all values from the 12 raster months into a single pool of values. I tried this:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;array = arcpy.RasterToNumPyArray([(raster1), (raster2), (raster3), (raster4), (raster5), (raster6), (raster7),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (raster8), (raster9), (raster10), (raster11), (raster12)],nodata_to_value=10000000000)

marray = numpy.ma.masked_values(array,10000000000)

per = 20

percentile_val = numpy.percentile(marray.compressed(),(per))

print percentile_val&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;But I think the RasterToNumPyArray function does not allow multiple rasters.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I wonder if someone could give me some tips to overcome this issue.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Many thanks in advance&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Tony&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 09:52:00 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/pool-of-raster-values-to-calculate-percentile/m-p/197510#M15134</guid>
      <dc:creator>anTonialcaraz</dc:creator>
      <dc:date>2021-12-11T09:52:00Z</dc:date>
    </item>
    <item>
      <title>Re: Pool of raster values to calculate percentile</title>
      <link>https://community.esri.com/t5/python-questions/pool-of-raster-values-to-calculate-percentile/m-p/197511#M15135</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;This way is easiest...just get your arrays in, I have created some for demo purposes&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;&amp;gt;&amp;gt;&amp;gt; a = np.zeros(9,dtype=int).reshape((3,3))
&amp;gt;&amp;gt;&amp;gt; b = np.ones_like(a)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # all ones/True
&amp;gt;&amp;gt;&amp;gt; c = b*2
&amp;gt;&amp;gt;&amp;gt; d = b*3
&amp;gt;&amp;gt;&amp;gt; stack = np.array([a,b,c,d])
&amp;gt;&amp;gt;&amp;gt; stack
array([[[0, 0, 0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [0, 0, 0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [0, 0, 0]],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [[1, 1, 1],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [1, 1, 1],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [1, 1, 1]],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [[2, 2, 2],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [2, 2, 2],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [2, 2, 2]],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [[3, 3, 3],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [3, 3, 3],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [3, 3, 3]]])
&amp;gt;&amp;gt;&amp;gt; per = 20
&amp;gt;&amp;gt;&amp;gt; np.percentile(stack,per,axis=0)
array([[ 0.6,&amp;nbsp; 0.6,&amp;nbsp; 0.6],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ 0.6,&amp;nbsp; 0.6,&amp;nbsp; 0.6],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ 0.6,&amp;nbsp; 0.6,&amp;nbsp; 0.6]])
&amp;gt;&amp;gt;&amp;gt; per = 50
&amp;gt;&amp;gt;&amp;gt; np.percentile(stack,per,axis=0)
array([[ 1.5,&amp;nbsp; 1.5,&amp;nbsp; 1.5],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ 1.5,&amp;nbsp; 1.5,&amp;nbsp; 1.5],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ 1.5,&amp;nbsp; 1.5,&amp;nbsp; 1.5]])
&amp;gt;&amp;gt;&amp;gt;&lt;/PRE&gt;&lt;P&gt;You will only be limited by memory as to whether you can read all the rasters in as arrays all at once.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 09:52:03 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/pool-of-raster-values-to-calculate-percentile/m-p/197511#M15135</guid>
      <dc:creator>DanPatterson_Retired</dc:creator>
      <dc:date>2021-12-11T09:52:03Z</dc:date>
    </item>
    <item>
      <title>Re: Pool of raster values to calculate percentile</title>
      <link>https://community.esri.com/t5/python-questions/pool-of-raster-values-to-calculate-percentile/m-p/197512#M15136</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks Dan. I guess when it comes to rasters it should be something like this? It seems to be working.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;raster1 = Raster(env.workspace + "\\" + "Maas_hvel_jan")
raster2 = Raster(env.workspace + "\\" + "Maas_hvel_feb")
raster3 = Raster(env.workspace + "\\" + "Maas_hvel_mar")
raster4 = Raster(env.workspace + "\\" + "Maas_hvel_apr")
raster5 = Raster(env.workspace + "\\" + "Maas_hvel_may")
raster6 = Raster(env.workspace + "\\" + "Maas_hvel_jun")
raster7 = Raster(env.workspace + "\\" + "Maas_hvel_jul")
raster8 = Raster(env.workspace + "\\" + "Maas_hvel_aug")
raster9 = Raster(env.workspace + "\\" + "Maas_hvel_sep")
raster10 = Raster(env.workspace + "\\" + "Maas_hvel_oct")
raster11 = Raster(env.workspace + "\\" + "Maas_hvel_nov")
raster12 = Raster(env.workspace + "\\" + "Maas_hvel_dec")

array1 = arcpy.RasterToNumPyArray(raster1,nodata_to_value=10000000000)
array2 = arcpy.RasterToNumPyArray(raster2,nodata_to_value=10000000000)
array3 = arcpy.RasterToNumPyArray(raster3,nodata_to_value=10000000000)
array4 = arcpy.RasterToNumPyArray(raster4,nodata_to_value=10000000000)
array5 = arcpy.RasterToNumPyArray(raster5,nodata_to_value=10000000000)
array6 = arcpy.RasterToNumPyArray(raster6,nodata_to_value=10000000000)
array7 = arcpy.RasterToNumPyArray(raster7,nodata_to_value=10000000000)
array8 = arcpy.RasterToNumPyArray(raster8,nodata_to_value=10000000000)
array9 = arcpy.RasterToNumPyArray(raster9,nodata_to_value=10000000000)
array10 = arcpy.RasterToNumPyArray(raster10,nodata_to_value=10000000000)
array11 = arcpy.RasterToNumPyArray(raster11,nodata_to_value=10000000000)
array12 = arcpy.RasterToNumPyArray(raster12,nodata_to_value=10000000000)

marray = numpy.ma.masked_values([(array1), (array2), (array3), (array4), (array5), (array6), (array7),(array8), (array9), (array10), (array11), (array12)],10000000000)

per = 20

percentile_val = numpy.percentile(marray.compressed(),(per))

print percentile_val&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 09:52:06 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/pool-of-raster-values-to-calculate-percentile/m-p/197512#M15136</guid>
      <dc:creator>anTonialcaraz</dc:creator>
      <dc:date>2021-12-11T09:52:06Z</dc:date>
    </item>
    <item>
      <title>Re: Pool of raster values to calculate percentile</title>
      <link>https://community.esri.com/t5/python-questions/pool-of-raster-values-to-calculate-percentile/m-p/197513#M15137</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;This is a very helpful code thanks Dan and Toni. Not that it is needed Toni, but if all your raster are in a single workspace and you would like to compress your code you could have something like this:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;import arcpy,numpy
from arcpy import env

env.workspace = "C:\\RasterFolder"


rasters = [arcpy.RasterToNumPyArray(arcpy.Describe(ras).catalogPath,nodata_to_value=10000000000) for ras in arcpy.ListRasters()]
&amp;nbsp; 
marray = numpy.ma.masked_values(rasters,10000000000)&amp;nbsp; 
&amp;nbsp; 
per = 20&amp;nbsp; 
&amp;nbsp; 
percentile_val = numpy.percentile(marray.compressed(),(per))&amp;nbsp; 
&amp;nbsp; 
print percentile_val &lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You could use a wild card to filter raster names and folders as well for the &lt;A href="http://pro.arcgis.com/en/pro-app/arcpy/functions/listrasters.htm" rel="nofollow noopener noreferrer" target="_blank"&gt;ListRasters &lt;/A&gt;function.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 09:52:09 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/pool-of-raster-values-to-calculate-percentile/m-p/197513#M15137</guid>
      <dc:creator>LukeSturtevant</dc:creator>
      <dc:date>2021-12-11T09:52:09Z</dc:date>
    </item>
    <item>
      <title>Re: Pool of raster values to calculate percentile</title>
      <link>https://community.esri.com/t5/python-questions/pool-of-raster-values-to-calculate-percentile/m-p/197514#M15138</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;That was very useful Luke. Thanks a lot.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 06 Nov 2015 14:26:54 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/pool-of-raster-values-to-calculate-percentile/m-p/197514#M15138</guid>
      <dc:creator>anTonialcaraz</dc:creator>
      <dc:date>2015-11-06T14:26:54Z</dc:date>
    </item>
    <item>
      <title>Re: POOL OF RASTER VALUES TO CALCULATE PERCENTILE</title>
      <link>https://community.esri.com/t5/python-questions/pool-of-raster-values-to-calculate-percentile/m-p/197515#M15139</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Ooopps&lt;/P&gt;&lt;P&gt;Toni... before you get to far you are using the wrong percentile if you have nodata areas&lt;/P&gt;&lt;P&gt;use.,...&lt;BR /&gt;&amp;gt;&amp;gt;&amp;gt; help(np.nanpercentile)&lt;BR /&gt;Help on function nanpercentile in module numpy.lib.nanfunctions:&lt;/P&gt;&lt;P&gt;nanpercentile(a, q, axis=None, out=None, overwrite_input=False, interpolation='linear', keepdims=False)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Compute the qth percentile of the data along the specified axis, while&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ignoring nan values.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Returns the qth percentile of the array elements.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 06 Nov 2015 16:04:38 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/pool-of-raster-values-to-calculate-percentile/m-p/197515#M15139</guid>
      <dc:creator>DanPatterson_Retired</dc:creator>
      <dc:date>2015-11-06T16:04:38Z</dc:date>
    </item>
    <item>
      <title>Re: Pool of raster values to calculate percentile</title>
      <link>https://community.esri.com/t5/python-questions/pool-of-raster-values-to-calculate-percentile/m-p/197516#M15140</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks Dan. It actually gives the same results within the script so I think it should be fine.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Cheers&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 09 Nov 2015 09:25:40 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/pool-of-raster-values-to-calculate-percentile/m-p/197516#M15140</guid>
      <dc:creator>anTonialcaraz</dc:creator>
      <dc:date>2015-11-09T09:25:40Z</dc:date>
    </item>
    <item>
      <title>Re: Pool of raster values to calculate percentile</title>
      <link>https://community.esri.com/t5/python-questions/pool-of-raster-values-to-calculate-percentile/m-p/197517#M15141</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Ok good.&amp;nbsp; You can skip the masked part as well if there are no, nodata areas then.&amp;nbsp; I does make a difference in processing time should you be working with large arrays and/or many arrays.&amp;nbsp; Should others be interested, there are nan equivalents for most of the statistical functions ( eg. np.mean --&amp;gt; np.nanmean)&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 09 Nov 2015 09:42:14 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/pool-of-raster-values-to-calculate-percentile/m-p/197517#M15141</guid>
      <dc:creator>DanPatterson_Retired</dc:creator>
      <dc:date>2015-11-09T09:42:14Z</dc:date>
    </item>
  </channel>
</rss>

