Not sure I totally understand the real world implications/restrictions
that might help suggest the best solution to your problem but here are
some ideas that may be useful...
msk=. (1 + i. >./ t) e. t NB. use this mask to expand your vector v
1 0 1 0 0 1 0 0 0 1 1 1
msk #inv!._ v
0 0 20 0 0 40 0 0 0 60 80 100 NB. need to use a unique number to
signify missings
]b=: msk #inv!._ v
0 _ 20 _ _ 40 _ _ _ 60 80 100
10 20 20 30 30 30 (I. b=_)} b NB. replace missings with your list of vals
0 10 20 20 20 40 30 30 30 60 80 100
You can compress the above to fewer steps:
]b=: v ([ #inv!._~ ] e.~ 1 + i.@(>./)@]) t
0 _ 20 _ _ 40 _ _ _ 60 80 100
newvals=: 10 20 20 30 30 30
newvals [`(([: I. _&=)@])`]} b
0 10 20 20 20 40 30 30 30 60 80 100
On Tue, Nov 20, 2012 at 11:38 AM, Alexander Epifanov <[email protected]> wrote:
> Hello,
>
> Unfortunately cannot resolve problem, which could be easy resolved with loop:
> t=: 1 3 6 10 11 12
> v=: 0 20 40 60 80 100
>
> i=: _1+(}.-}:) t
> i NB. its just distance between numbers
> 1 2 3 0 0 0
>
> And now the main problem for me, because I have to modify v array:
> if i = 0 then nothing
> if i = 1 or i = 2 then insert average value (for 1) and two values for 2
> if i = 3 then insert previous value
>
> so, we have to fill missed values in t and v:
> t=: 1 3 6 10 11 12
> v=: 0 20 40 60 80 100
>
> should be:
> t2: 1 2 3 4 5 6 7 8 9 10 11 12 (ok, its just full index now)
> v2: 0 10 20 30 30 40 40 40 40 60 80 100
> ^ inserted by condition: 10; 30 30; 40 40 40
>
> Could you please help how to resolve it better? I suppose I can rotate
> |:t,:v and then fold it one-by-one, but I think it is not good
> solution.
>
> Thank you,
> --
> Regards,
> Alexander.
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm