tmin = var.min(axis=0), tmax = var.max(axis=0), savail = 1.*(~var2d.mask).sum(axis=1)/var2d.shape[1], smean = var2d.mean(axis=1), sstd = var2d.std(axis=1), smin = var2d.min(axis=1), smax = var2d.max(axis=1), ) dstats['thist'] = N.ma.zeros((nbins-1, ny, nx), 'l') dstats['shist'] = N.ma.zeros((nt, nbins-1), 'l') for ibin in xrange(nbins-1): valid = (varm>=bins[ibin])&(varm<bins[ibin+1]) dstats['thist'][ibin] = valid.filled(False).sum(axis=0) dstats['shist'][:, ibin] = valid.filled(False).reshape((nt, -1)).sum(axis=1) dstats['thist'][:, maskyx] = N.ma.masked dstats['shist'][:, maskt] = N.ma.masked # Indirect using StatAccum sa = StatAccum(tall=True, sall=True, bins=bins) sa += var[:7] sa += var[7:] istats = sa.get_stats() # Unitest result = [] for key in sorted(dstats.keys()): value = N.ma.allclose(dstats[key], istats[key]) result.append(('assertTrue', value)) # print key, value
) dstats['thist'] = N.ma.zeros((nbins - 1, ny, nx), 'l'), N.ma.zeros( (nbins - 1, ny, nx), 'l') dstats['shist'] = N.ma.zeros((nt, nbins - 1), 'l'), N.ma.zeros((nt, nbins - 1), 'l') for ivar, varm in enumerate([varm1, varm2]): for ibin in xrange(nbins - 1): valid = (varm >= bins[ibin]) & (varm < bins[ibin + 1]) dstats['thist'][ivar][ibin] = valid.filled(False).sum(axis=0) dstats['shist'][ivar][:, ibin] = valid.filled(False).reshape( (nt, -1)).sum(axis=1) dstats['thist'][ivar][:, maskyx] = N.ma.masked dstats['shist'][ivar][maskt, :] = N.ma.masked # Indirect using StatAccum sa = StatAccum(tall=True, sall=True, bins=bins) sa += var1[:7], var2[:7] sa += var1[7:], var2[7:] istats = sa.get_stats() # Unitest result = [] for key in sorted(dstats.keys()): if isinstance(dstats[key], tuple): for i in 0, 1: value = N.ma.allclose(dstats[key][i], istats[key][i]) result.append(('assertTrue', value)) else: value = N.ma.allclose(dstats[key], istats[key]) result.append(('assertTrue', value))
var1.id = 'ssh' var2 = var1.clone() var2[:] += N.ma.sin(var1)*100 var1[3:13, 5:9, 3:7] = MV2.masked var2[5:15, 7:12, 1:5] = MV2.masked var2.long_name = 'Sea level' var2.id = 'sla' mask = var1.mask|var2.mask # common mask vmax = var2.max() bins = N.linspace(-0.1*vmax, 0.9*vmax, 14) nbins = len(bins) restart_file = code_file_name(ext='nc') print restart_file # Normal sa0 = StatAccum(tall=True, sall=True, bins=bins) sa0 += var1[:7], var2[:7] # Dump sa0.dump(restart_file) # Load from scratach sa1 = StatAccum(restart=True, restart_file=restart_file) ## Intermediate load #sa1 = StatAccum(tall=True, sall=True, bins=bins) #sa1 += var1[:5], var2[:5] #sa1.load(restart_file) # # Finish stats sa0 += var1[7:], var2[7:]