Re: do loops - limits

From: Dennis Shea (shea AT XXXXXX)
Date: Tue Jun 22 2004 - 15:07:40 MDT


>Does anyone have a suggestion how to do this
>without using a do loop, so it's faster? Thanks.
>
> do ilat=0,359
> do ilon=0,719
>
> if (var(ilat,ilon).ge.30.) then
> var(ilat,ilon)=30.
> end if
> if (var(ilat,ilon).le.-30.) then
> var(ilat,ilon)=-30.
> end if
>
> end do
> end do

**untested**

Use NCL's "ind" function. This will be quite fast.

var_1d = ndtooned(var) ; convert to 1D
inda = ind(var_1d.gt. 30) ; indices
indb = ind(var_1d.lt.-30)

if (.not.any(ismissing(inda))) then ; makes sure inda not "missing"
    var_1d(inda) = 30.
end if

if (.not.any(ismissing(indb))) then
    var_1d(indb) = -30.
end if

var = onedtond(var_1d, dimsizes(var)) ; reconstruct

_______________________________________________
ncl-talk mailing list
ncl-talk AT ucar.edu
http://mailman.ucar.edu/mailman/listinfo/ncl-talk



This archive was generated by hypermail 2b29 : Tue Jun 22 2004 - 15:05:32 MDT