Build 2D array from loops [message #92743] |
Mon, 22 February 2016 05:08  |
Matt G
Messages: 4 Registered: February 2016
|
Junior Member |
|
|
Hi, new to IDL so please forgive if very simple request.
I'm trying to build an array where the values stored are in two columns: one with the values of i in my FOR loop, and the other the output of that FOR loop. To make it more complicated, within my FOR loop is an IF condition that skips over bad data.
How do I structure this code so that the array is built from the output of my loops?
Cheers
|
|
|
Re: Build 2D array from loops [message #92744 is a reply to message #92743] |
Mon, 22 February 2016 06:30   |
greg.addr
Messages: 160 Registered: May 2007
|
Senior Member |
|
|
On Monday, February 22, 2016 at 2:08:39 PM UTC+1, Matt G wrote:
> Hi, new to IDL so please forgive if very simple request.
>
> I'm trying to build an array where the values stored are in two columns: one with the values of i in my FOR loop, and the other the output of that FOR loop. To make it more complicated, within my FOR loop is an IF condition that skips over bad data.
>
> How do I structure this code so that the array is built from the output of my loops?
>
> Cheers
It's often possible to work without loops in IDL. I'd do it something like this:
IDL> i=indgen(10)
IDL> a=i^2 ;replace with your expression
IDL> b=transpose([[i],[a]]) ;combine into two column array
IDL> b
0 0
1 1
2 4
3 9
4 16
5 25
6 36
7 49
8 64
9 81
Use the where() function to filter out your bad values, e.g.
IDL> q=where(a lt 50) ;keep only values where a<50
IDL> b[*,q]
0 0
1 1
2 4
3 9
4 16
5 25
6 36
7 49
cheers,
Greg
|
|
|
Re: Build 2D array from loops [message #92754 is a reply to message #92744] |
Thu, 25 February 2016 02:44  |
Matt G
Messages: 4 Registered: February 2016
|
Junior Member |
|
|
On Monday, February 22, 2016 at 2:30:18 PM UTC, greg...@googlemail.com wrote:
> On Monday, February 22, 2016 at 2:08:39 PM UTC+1, Matt G wrote:
>> Hi, new to IDL so please forgive if very simple request.
>>
>> I'm trying to build an array where the values stored are in two columns: one with the values of i in my FOR loop, and the other the output of that FOR loop. To make it more complicated, within my FOR loop is an IF condition that skips over bad data.
>>
>> How do I structure this code so that the array is built from the output of my loops?
>>
>> Cheers
>
> It's often possible to work without loops in IDL. I'd do it something like this:
>
> IDL> i=indgen(10)
> IDL> a=i^2 ;replace with your expression
> IDL> b=transpose([[i],[a]]) ;combine into two column array
> IDL> b
> 0 0
> 1 1
> 2 4
> 3 9
> 4 16
> 5 25
> 6 36
> 7 49
> 8 64
> 9 81
>
> Use the where() function to filter out your bad values, e.g.
>
> IDL> q=where(a lt 50) ;keep only values where a<50
> IDL> b[*,q]
> 0 0
> 1 1
> 2 4
> 3 9
> 4 16
> 5 25
> 6 36
> 7 49
>
> cheers,
> Greg
Couldn't work out how to avoid a loop completely (it's quite a lengthy process for the data) but managed to sort out my issue from your advice.
Thanks a bunch!
Matt
|
|
|