Eric's probably right and it's indexing with a masked array that's causing you trouble.<br>Since you seem to say your NaN values correspond to your mask, you should be able to simply do:<br><br>modelData[modeData.mask] = dataMin<br>
<br>Note that in further processing it may then make more sense to remove the mask, since your array is now full with valid data:<br>modelData = modelData.data<br><br>-=- Olivier<br><br><div class="gmail_quote">Le 27 janvier 2012 17:37, Howard <span dir="ltr"><<a href="mailto:howard@renci.org">howard@renci.org</a>></span> a écrit :<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  
    
  
  <div bgcolor="#FFFFFF" text="#000000"><div class="im">
    On 1/27/12 5:21 PM, Eric Firing wrote:
    <blockquote type="cite">
      <pre>On 01/27/2012 11:18 AM, Howard wrote:
</pre>
      <blockquote type="cite">
        <pre>Hi all

I am a fairly recent convert to python and I have got a question that's
got me stumped. I hope this is the right mailing list: here goes :)

I am reading some time series data out of a netcdf file a single
timestep at a time. If the data is NaN, I want to reset it to the
minimum of the dataset over all timesteps (which I already know). The
data is in a variable of type numpy.ma.core.MaskedArray called modelData.

If I do this:

for i in range(len(modelData)):
if math.isnan(modelData[i]):
modelData[i] = dataMin

I get the effect I want, If I do this:

modelData[np.isnan(modelData)] = dataMin

it doesn't seem to be working. Of course I could just do the first one,
but len(modelData) is about 3.5 million, and it's taking about 20
seconds to run. This is happening inside of a rendering loop, so I'd
like it to be as fast as possible, and I thought the second one might be
faster, and maybe it is, but it doesn't seem to be working! :)
</pre>
      </blockquote>
      <pre>It would help if you would say explicitly what you mean by "doesn't seem 
to be working", ideally by providing a minimal complete example 
illustrating the problem.</pre>
    </blockquote></div>
    Hi Eric<br>
    <br>
    Thanks for the reply.  Yes, I can be a little more specific about
    the issue.  I am reading data from a storm surge model out of a
    NetCDF file so I can render it with tricontourf. The model data has
    both a triangulation and a set of lat, lon points that are invariant
    for the entire model run, as well as data for each time step. As the
    model runs, triangles in the coastal plain wet and dry: the dry
    values are indicated by NaN values in the data and should not be
    rendered.  Those I mask off previous to this code. I have found, in
    using tricontourf, that in the mapping from data values to color
    values, the range of the data seems to include even the data from
    the masked triangles.  This causes the data to be either
    monochromatic or bi-chromatic (the high and low colors in the map). 
    However, once the triangles are masked, if I set the corresponding
    data values to the known dataMin (or in fact, any value in the valid
    data range) the render proceeds correctly.  So in the case of the
    first piece of code, I get reasonable images: using the second I do
    not.<div class="im"><br>
    <br>
    <blockquote type="cite">
      <pre>Does modelData have masked values that you want to keep separate from 
your NaN values?  If not, you can do this:</pre>
    </blockquote>
    <br></div>
    No I don't think so. <br><div class="im">
    <blockquote type="cite">
      <pre>y = np.ma.masked_invalid(modelData).filled(dataMin)

Then y will be an ordinary ndarray.  If this is not satisfactory because 
you need to keep separate some initially masked values, then you may 
need to save the initial mask and use it to turn y back into a masked array.

You may be running into trouble with your initial approach because using 
np.isnan on a masked array is giving a masked array, and I think trying 
to index with a masked array is not advised.</pre>
    </blockquote></div>
    This could certainly be be the issue. I will look into this Monday.
    <br>
    <br>
    Thanks very much for taking the time to reply.<br>
    Howard<div><div class="h5"><br>
    <br>
    <blockquote type="cite">
      <pre>In [2]: np.isnan(np.ma.array([1.0, np.nan, 2.0], mask=[False, False, True]))
Out[2]:
masked_array(data = [False True --],
              mask = [False False  True],
        fill_value = True)

Eric

</pre>
      <blockquote type="cite">
        <pre>Any ideas would be much appreciated.

Thanks
Howard

--
Howard Lander <a href="mailto:howard@renci.org" target="_blank"><mailto:howard@renci.org></a>
Senior Research Software Developer
Renaissance Computing Institute (RENCI) <a href="http://www.renci.org" target="_blank"><http://www.renci.org></a>
The University of North Carolina at Chapel Hill
Duke University
North Carolina State University
100 Europa Drive
Suite 540
Chapel Hill, NC 27517
919-445-9651



_______________________________________________
NumPy-Discussion mailing list
<a href="mailto:NumPy-Discussion@scipy.org" target="_blank">NumPy-Discussion@scipy.org</a>
<a href="http://mail.scipy.org/mailman/listinfo/numpy-discussion" target="_blank">http://mail.scipy.org/mailman/listinfo/numpy-discussion</a>
</pre>
      </blockquote>
      <pre>_______________________________________________
NumPy-Discussion mailing list
<a href="mailto:NumPy-Discussion@scipy.org" target="_blank">NumPy-Discussion@scipy.org</a>
<a href="http://mail.scipy.org/mailman/listinfo/numpy-discussion" target="_blank">http://mail.scipy.org/mailman/listinfo/numpy-discussion</a>
</pre>
    </blockquote>
    <br>
    <br>
    </div></div><div><span class="HOEnZb"><font color="#888888">-- <br>
      <a href="mailto:howard@renci.org" target="_blank">Howard Lander</a></font></span><div class="im"><br>
      Senior Research Software Developer<br>
      <a href="http://www.renci.org" target="_blank">Renaissance Computing Institute
        (RENCI)</a> <br></div><div class="im">
      The University of North Carolina at Chapel Hill<br>
      Duke University<br>
      North Carolina State University<br>
      100 Europa Drive<br>
      Suite 540<br>
      Chapel Hill, NC 27517<br>
      919-445-9651
    </div></div>
  </div>

<br>_______________________________________________<br>
NumPy-Discussion mailing list<br>
<a href="mailto:NumPy-Discussion@scipy.org">NumPy-Discussion@scipy.org</a><br>
<a href="http://mail.scipy.org/mailman/listinfo/numpy-discussion" target="_blank">http://mail.scipy.org/mailman/listinfo/numpy-discussion</a><br>
<br></blockquote></div><br>