[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Filling an array
davidf@dfanning.com (David Fanning) writes:
> Pavel A. Romashkin (pavel.romashkin@noaa.gov) writes:
>
> > If I have
> >
> > a = findgen(10)
> > b = fix(100* randomu(10, 10))
> > ; N_elements(a) is equal to n_elements(b)
> > c = findgen(total(b))
> >
> > how can I fill C with values from A using B as a running index, so that
> >
> > c[0 : b[0]-1] = a[0]
> > c[b[0] : b[0]+b[1]-1] = a[1]
> >
> > etc, without looping through "n_elements(b)-1" iterations?
> > I have a fast solution with a loop and indexing using total(/cumulative)
> > and a very slow one with loop and replicate, but I can't come up with a
> > loop-free one.
>
> Totally impossible. :-(
>
> Cheers,
>
> P.S. Let's just say that usually gets the juices going
> on the usual suspects, and I figured you could use the
> help. :-)
Juices or not, I don't see how this can be done without a loop. Since
the segments specified by B can be of different sizes, I think you are
stuck. However, as I've said in the past: loops aren't bad! If you
can get enough work done in a single iteration then loops are fine.
Craig
--
--------------------------------------------------------------------------
Craig B. Markwardt, Ph.D. EMAIL: craigmnet@cow.physics.wisc.edu
Astrophysics, IDL, Finance, Derivatives | Remove "net" for better response
--------------------------------------------------------------------------