Re: Irregular grid -> 2D binned [message #49408] |
Sun, 23 July 2006 17:54 |
will[1]
Messages: 6 Registered: July 2006
|
Junior Member |
|
|
Wow, this actually worked much, much faster than griddata (and is more
understandable than the extremely verbose, but not very informative,
griddata documentation). Thank you!
Ed Hyer wrote:
> also note that JD smith has written a routine called HIST_ND (get it
> from David Fanning's website), which will do histograms in up to eight
> dimensions, and provide reverse indices.
>
> Your example is rather interesting, in that your initial data set is
> itself a histogram...
>
> Here's how to get with HIST_ND where you're going:
>
> h2=hist_nd(transpose([[data1],[data2]]),[bin1,bin2],min=[min 1,min2],max=[max1,max2],reverse_indices=ri)
> totals2=h2*0; initialize totals
> for i=0l,n_elements(h2)-1 do if(h2[i] ne 0) then
> totals2[i]=total(value[ri[ri[i]:(ri[i+1]-1)]])
>
> I've been doing this so much it's becoming muscle memory.
>
>
>
> will wrote:
>> Excellent, thank you! (and here I was going to do it all so manually).
>>
>> will
>>
>> jgc wrote:
>>> have a look at GRIDDATA and GRID_INPUT functions, this last with
>>> DUPLICATES=Avg
>>>
>>> J.
>>>
>>> will wrote:
>>>> I've sucked it up, I think I need a push in the right direction.
>>>> Imagine that I have a long (~6 million points) list of data that
>>>> includes three fields: latitude, longitude, abundance. The lats and
>>>> lons are all over the place (i.e. no regular grid) and I'd like to bin
>>>> them into an image. Additionally I'd like to average abundance of each
>>>> bin to be the color for the image.
>>>>
>>>> I can use the reverse indices keword in histogram. I can even use mean
>>>> pretty well. I can get a binned histogram using histo_2D. But I'm
>>>> having a hard time thinking about how to go from the reverse indices of
>>>> histogram to the histo_2D case which doesn't offer the same keyword.
>>>> The only way I can think of to do this is to:
>>>>
>>>> a) do a histogram of the latitudes (using RI)
>>>> b) do a histogram of the longitudes (using RI)
>>>> c) find the intersection of indices for each bin that I want
>>>> d) "flatten" the lat, lon, indices/abund cube with matrix
>>>> multiplication
>>>>
>>>> It's the "c" part I'm sketched out on, my brain's can't think around
>>>> anything but a very evil Loop.
>>>>
>>>> Has this really easy or been answered here before? (Array decimation
>>>> was the closest thing I found).
>>>>
>>>> Thanks in advance!
|
|
|
Re: Irregular grid -> 2D binned [message #49413 is a reply to message #49408] |
Sun, 23 July 2006 09:39  |
MarioIncandenza
Messages: 231 Registered: February 2005
|
Senior Member |
|
|
also note that JD smith has written a routine called HIST_ND (get it
from David Fanning's website), which will do histograms in up to eight
dimensions, and provide reverse indices.
Your example is rather interesting, in that your initial data set is
itself a histogram...
Here's how to get with HIST_ND where you're going:
h2=hist_nd(transpose([[data1],[data2]]),[bin1,bin2],min=[min 1,min2],max=[max1,max2],reverse_indices=ri)
totals2=h2*0; initialize totals
for i=0l,n_elements(h2)-1 do if(h2[i] ne 0) then
totals2[i]=total(value[ri[ri[i]:(ri[i+1]-1)]])
I've been doing this so much it's becoming muscle memory.
will wrote:
> Excellent, thank you! (and here I was going to do it all so manually).
>
> will
>
> jgc wrote:
>> have a look at GRIDDATA and GRID_INPUT functions, this last with
>> DUPLICATES=Avg
>>
>> J.
>>
>> will wrote:
>>> I've sucked it up, I think I need a push in the right direction.
>>> Imagine that I have a long (~6 million points) list of data that
>>> includes three fields: latitude, longitude, abundance. The lats and
>>> lons are all over the place (i.e. no regular grid) and I'd like to bin
>>> them into an image. Additionally I'd like to average abundance of each
>>> bin to be the color for the image.
>>>
>>> I can use the reverse indices keword in histogram. I can even use mean
>>> pretty well. I can get a binned histogram using histo_2D. But I'm
>>> having a hard time thinking about how to go from the reverse indices of
>>> histogram to the histo_2D case which doesn't offer the same keyword.
>>> The only way I can think of to do this is to:
>>>
>>> a) do a histogram of the latitudes (using RI)
>>> b) do a histogram of the longitudes (using RI)
>>> c) find the intersection of indices for each bin that I want
>>> d) "flatten" the lat, lon, indices/abund cube with matrix
>>> multiplication
>>>
>>> It's the "c" part I'm sketched out on, my brain's can't think around
>>> anything but a very evil Loop.
>>>
>>> Has this really easy or been answered here before? (Array decimation
>>> was the closest thing I found).
>>>
>>> Thanks in advance!
|
|
|
Re: Irregular grid -> 2D binned [message #49416 is a reply to message #49413] |
Sat, 22 July 2006 02:42  |
will[1]
Messages: 6 Registered: July 2006
|
Junior Member |
|
|
Excellent, thank you! (and here I was going to do it all so manually).
will
jgc wrote:
> have a look at GRIDDATA and GRID_INPUT functions, this last with
> DUPLICATES=Avg
>
> J.
>
> will wrote:
>> I've sucked it up, I think I need a push in the right direction.
>> Imagine that I have a long (~6 million points) list of data that
>> includes three fields: latitude, longitude, abundance. The lats and
>> lons are all over the place (i.e. no regular grid) and I'd like to bin
>> them into an image. Additionally I'd like to average abundance of each
>> bin to be the color for the image.
>>
>> I can use the reverse indices keword in histogram. I can even use mean
>> pretty well. I can get a binned histogram using histo_2D. But I'm
>> having a hard time thinking about how to go from the reverse indices of
>> histogram to the histo_2D case which doesn't offer the same keyword.
>> The only way I can think of to do this is to:
>>
>> a) do a histogram of the latitudes (using RI)
>> b) do a histogram of the longitudes (using RI)
>> c) find the intersection of indices for each bin that I want
>> d) "flatten" the lat, lon, indices/abund cube with matrix
>> multiplication
>>
>> It's the "c" part I'm sketched out on, my brain's can't think around
>> anything but a very evil Loop.
>>
>> Has this really easy or been answered here before? (Array decimation
>> was the closest thing I found).
>>
>> Thanks in advance!
|
|
|
Re: Irregular grid -> 2D binned [message #49417 is a reply to message #49416] |
Sat, 22 July 2006 01:17  |
jgc
Messages: 10 Registered: July 2006
|
Junior Member |
|
|
have a look at GRIDDATA and GRID_INPUT functions, this last with
DUPLICATES=Avg
J.
will wrote:
> I've sucked it up, I think I need a push in the right direction.
> Imagine that I have a long (~6 million points) list of data that
> includes three fields: latitude, longitude, abundance. The lats and
> lons are all over the place (i.e. no regular grid) and I'd like to bin
> them into an image. Additionally I'd like to average abundance of each
> bin to be the color for the image.
>
> I can use the reverse indices keword in histogram. I can even use mean
> pretty well. I can get a binned histogram using histo_2D. But I'm
> having a hard time thinking about how to go from the reverse indices of
> histogram to the histo_2D case which doesn't offer the same keyword.
> The only way I can think of to do this is to:
>
> a) do a histogram of the latitudes (using RI)
> b) do a histogram of the longitudes (using RI)
> c) find the intersection of indices for each bin that I want
> d) "flatten" the lat, lon, indices/abund cube with matrix
> multiplication
>
> It's the "c" part I'm sketched out on, my brain's can't think around
> anything but a very evil Loop.
>
> Has this really easy or been answered here before? (Array decimation
> was the closest thing I found).
>
> Thanks in advance!
|
|
|