Mikl:

I see that with all the timing debate, your question never got answered.

My solution on this part was no good: I used ] i: 1:, which gives O(n^2)
behavior.

Mike Day's solution appears to find the minimum of each box, even though
you know it is the first element.

Here is a modification which just replicates the first element of each box.

pred=:1,}.<}: NB. predicate: use whatever is best
fill=:1 : ';(# # {.)&.> (u y) <;.1 y' NB. adverb
pred fill d
10 7 5 5 5 1 1 8 2 2

Best wishes,

John


Mikl Kurkov wrote:
> I see that several functions that I need have similar pattern:
> Let x - boolean vector (result of some predicate)
> and y - vector of some data, where #x = #y
> then result of function f is
> f(0) = y(0)
> f(i) = if x(i) = 1 then y(i) else f(i-1)
>
> so I wrote function c1p0 (stands for "copy for 1 previous for 0")
> c1p0 =: (-~i.@:#) @: ; @: (< @: i. @: # ;. 1)@[  { ]
>
> with it if I have predicate function p and data function g I can use it as
> (p c1p0 g) data
>
> it can be used for closest local minimum and maximum too
> locmin =: (1, }.<}:) c1p0 ]
> locmax =: (1, }.>}:) c1p0 ]
>
> It perform not as well as your suggestions but it can be used for other
> cases.
> Now I wonder if it can be improved in terms of time?
>
>
> --
> Mikl
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>


----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to