Re: array dimensions and subscripts [message #39200 is a reply to message #39199] |
Tue, 27 April 2004 08:07  |
David Fanning
Messages: 11724 Registered: August 2001
|
Senior Member |
|
|
Benjamin Hornberger writes:
> I have a 3d data array A (n_columns, n_rows, n_data) where columns and
> rows make up an image and for each pixel in the image I recorded n_data
> different data values.
>
> Then I have a 1d array B with n_data entries, and I want to subtract B
> from A such that for each element in A, the element from B in the
> corresponding data channel is subtracted. Obviously, A-B won't work. I
> can imagine two ways:
>
> 1. For loop
>
> result = fltarr(n_columns, n_rows, n_data) ;; initialize
> for i=0, n_data-1 do results[*, *, i] = A[*, *, i] - B[i]
>
> 2. Blowing up B to 3d (which I can't manage to do without a for loop
> either)
>
> B1 = fltarr(n_column, n_rows, n_data)
> for i=0, n_data-1 do B1[*, *, i] = B[i]
> result = A - B1
>
> But these solutions don't seem very elegant and efficient to me. Is
> there any way to make it work with a single array operation using the *
> subscript, or something similar?
While you are waiting for an answer, I'd browse the Dimensional
Juggling Tutorial. I have a feeling it is going to be mentioned
somewhere in the answer. :-)
http://www.dfanning.com/tips/rebin_magic.html
Cheers,
David
--
David Fanning, Ph.D.
Fanning Software Consulting
Coyote's Guide to IDL Programming: http://www.dfanning.com/
|
|
|