def put(arr, ids, values): """ The opposite of `take`. The values of `arr` at the locations specified by `ids` are set to the corresponding value of `values`. The following is to test improvments to puts with masked arrays. Places in the code were assuming incorrect put behavior. >>> maskValue = 999999 >>> arr = zeros(3, 'l') >>> ids = MA.masked_values((2, maskValue), maskValue) >>> values = MA.masked_values((4, maskValue), maskValue) >>> put(arr, ids, values) ## this should work >>> print arr [0 0 4] >>> arr = MA.masked_values((maskValue, 5, 10), maskValue) >>> ids = MA.masked_values((2, maskValue), maskValue) >>> values = MA.masked_values((4, maskValue), maskValue) >>> put(arr, ids, values) >>> print arr ## works as expected [-- 5 4] >>> arr = MA.masked_values((maskValue, 5, 10), maskValue) >>> ids = MA.masked_values((maskValue, 2), maskValue) >>> values = MA.masked_values((4, maskValue), maskValue) >>> put(arr, ids, values) >>> print arr ## should be [-- 5 --] maybe?? [-- 5 999999] """ if _isPhysical(arr): arr.put(ids, values) elif MA.isMaskedArray(arr): if NUMERIX.sometrue(MA.getmaskarray(ids)): if numpy_version == 'old': pvalues = MA.array(values, mask=MA.getmaskarray(ids)) else: pvalues = MA.array(values.filled(), mask=MA.getmaskarray(ids)) MA.put(arr, ids.compressed(), pvalues.compressed()) else: MA.put(arr, ids, values) elif MA.isMaskedArray(ids): NUMERIX.put(arr, ids.compressed(), MA.array(values, mask=MA.getmaskarray(ids)).compressed()) else: NUMERIX.put(arr, ids, values)
def dimensionlessUnmasked(a): unit = 1 mask = False if _isPhysical(a): unit = a.inBaseUnits().getUnit() a = a.numericValue if MA.isMaskedArray(a): mask = a.mask a = a.filled(fill_value=1) if not a.flags['C_CONTIGUOUS']: a = a.copy('C') return (a, unit, mask)