[Numpy-discussion] more recfunctions, structured array help
Tue Dec 8 16:50:26 CST 2009
On Dec 8, 2009, at 5:32 PM, John [H2O] wrote:
> Pierre GM-2 wrote:
>> masked_where is a function that requires 2 arguments.
>> If you try to mask a whole record, you can try something like
>>>>> x = ma.array([('a',1),('b',2)],dtype=[('','|S1'),('',float)])
>>>>> x[x['f0']=='a'] = ma.masked
>> For an individual field, try something like
>>>>> x['f1'][x['f1']=='b'] = ma.masked
> Just some more detail, here's what I'm working on:
Did you check scikits.timeseries ? Might be a solution if you have data indexed in time
> def mk_COarray(rD,datetimevec):
> """ rD is a previous record array, but I add the datetime vector """
> codata =
> codata = np.ma.array(codata)
> codata_masked = np.ma.masked_where(codata==-9999.,codata)
> codata =
> return codata, codata_masked
OK, I gonna have to guess again:
codata is a regular ndarray, not structured ? Then you don't have to transform it into a masked array
codata_masked = np.ma.masked_values(codata,-9999.)
Then you transform codata into a np.recarray... But why not transforming codata_masked ?
It is hard to help you, because I don't know the actual structure you use. Once again, please give a self contained example. The first two entries of codata would be enough.
> Plotting the arrays out of this:
> In : cd,cdm = mk_COarray(rD,datetimevec)
> In : plt.plot(cd.datetime,cd.co,label='raw');
> I get the following image, where you can see that the codata which is
> created from the codata_masked seems to not be masked????
Er... You can check whether codata_masked is masked by checking if some entries of its mask are True (codata_masked.mask.any()).
Given your graph, I'd say yes, codata_masked is actually masked: see how you have a gap in your green curve when the blue one plummets into negative? That's likely where your elevation was -9999., I'd say.
More information about the NumPy-Discussion