[ncl-talk] running sequence of 0s and 1s [SEC=UNCLASSIFIED]
Peter Gibson
peter.gibson at unsw.edu.au
Wed Mar 8 15:31:08 MST 2017
Thanks Griff and Dennis - this is a useful function and the loop doesn't appear to cause problems for me on a reasonably large data.
While it is a rather 'specific' function as you say, I suggest it may be useful also to other NCL users. For example, those interested in examining a sequence of dry/wet days in the context of drought and retaining this information as an index.
Thanks again.
Peter
________________________________
From: Dennis Shea <shea at ucar.edu>
Sent: Thursday, March 9, 2017 2:03:11 AM
To: Griffith Young
Cc: Peter Gibson; ncl-talk at ucar.edu
Subject: Re: [ncl-talk] running sequence of 0s and 1s [SEC=UNCLASSIFIED]
Griff is correct that interpreted languages can be slow executing do loops. However, I always suggest doing a simple timing test like below. On my MAC, with, N=10000
gibson_young: N=10000: ===> 0.03022 seconds
------------------------------------
undef("gibson_young")
function gibson_young(q[*]:numeric)
begin
nq = dimsizes(q)
qsum = conform(q, 0, -1) ; initialize to 0
do n=0,nq-1
if (q(n).eq.0) then
t = 0
end if
if (q(n).eq.1) then
qsum(n) = t
t = t + 1
end if
end do
return(qsum)
end
;=====================================
; MAIN
;=====================================
;
; desired result: 0 0 0 0 1 0 0 1 2 3 4 0 0 1 2 0
q = (/0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0/)
qsum = gibson_young(q)
print(q+" "+qsum)
;========
N = 10000
x = random_uniform(-10,10,N)
x = where(x.lt.0, 0, 1)
tStrt = get_cpu_time()
xsum = gibson_young(x)
print("gibson_young: N="+N+ ": " + (get_cpu_time() - tStrt))
;print(xsum)
On Tue, Mar 7, 2017 at 9:43 PM, Dennis Shea <shea at ucar.edu<mailto:shea at ucar.edu>> wrote:
Never underestimate Aussie brute force!
==========
undef("gibson_young")
function gibson_young(q[*]:numeric)
local nq, qsum, n, t
begin
nq = dimsizes(q)
qsum = conform(q, 0, -1) ; initialize to 0
do n=0,nq-1
if (q(n).eq.0) then
t = 0
end if
if (q(n).eq.1) then
qsum(n) = t
t = t + 1
end if
end do
return(qsum)
end
;
; desired result: 0 0 0 0 1 0 0 1 2 3 4 0 0 1 2 0
q = (/0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0/)
qsum = gibson_young(q)
print(q+" "+qsum)
===
(0) 0 0
(1) 0 0
(2) 0 0
(3) 1 0
(4) 1 1
(5) 0 0
(6) 1 0
(7) 1 1
(8) 1 2
(9) 1 3
(10) 1 4
(11) 0 0
(12) 1 0
(13) 1 1
(14) 1 2
On Tue, Mar 7, 2017 at 9:19 PM, Griffith Young <griffith.young at bom.gov.au<mailto:griffith.young at bom.gov.au>> wrote:
Hello Peter,
Not if you go to the casino and are doubling up your bet.
This code seems to work...
v = {vector or array of 1's and 0's}
c = v
t = 0
do i = 0, dimsizes(v) - 1
if v(i) .eq. 0 then
c(i) = 0
t = 0
end if
if (v(i) .eq. 1) then
c(i) = t
t = t + 1
end if
end do
Caveat: "Since NCL is an interpreted language, it is best to avoid do loops as much as possible. They can cause considerable slow downs. Small loops should not be a problem."
Regards, Griff.
From: ncl-talk-bounces at ucar.edu<mailto:ncl-talk-bounces at ucar.edu> [mailto:ncl-talk-bounces at ucar.edu<mailto:ncl-talk-bounces at ucar.edu>] On Behalf Of Dennis Shea
Sent: Wednesday, 8 March 2017 2:59 PM
To: Peter Gibson
Cc: ncl-talk at ucar.edu<mailto:ncl-talk at ucar.edu>
Subject: Re: [ncl-talk] running sequence of 0s and 1s
Sorry, no. Pretty specialized function ...
: 0 0 0 1 1 0 1 1 1 1 1 0 1 1 1 0 ... input: 1st 1 is a flag
: 0 0 0 0 1 0 0 1 2 3 4 0 0 1 2 0
On Tue, Mar 7, 2017 at 8:17 PM, Peter Gibson <peter.gibson at unsw.edu.au<mailto:peter.gibson at unsw.edu.au>> wrote:
Hello,
Is there a function to calculate the running length of 0/1s in a sequence in NCL?
for example if I had a vector v : 0 0 0 1 1 0 1 1 1 1 1 0 1 1 1 0 ...
the running sequence would be : 0 0 0 0 1 0 0 1 2 3 4 0 0 1 2 0 ...
I see the function dim_numrun counts the number of unique sequence lengths which is similar but not exactly what I am after ....
Thanks,
Peter
_______________________________________________
ncl-talk mailing list
ncl-talk at ucar.edu<mailto:ncl-talk at ucar.edu>
List instructions, subscriber options, unsubscribe:
http://mailman.ucar.edu/mailman/listinfo/ncl-talk
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20170308/cda44aec/attachment.html
More information about the ncl-talk
mailing list