[yt-users] Nearest neighbours

Sam Skillman samskillman at gmail.com
Wed Sep 14 13:59:40 PDT 2011


Hi Elizabeth,

Since conferences are good times for very short projects, I've written up a
go at the nearest neighbors.  See the commit message for a bit more info.

https://bitbucket.org/yt_analysis/yt/changeset/dfb88152f5e0

There are two functions.  One that takes a position and will return the
neighbor cells around that position.  The other takes the grid object and
cell indices and does the same thing.

They are
AMRKDTree.get_nearest_neighbors_from_position
and
AMRKDTree.get_nearest_neighbors

Check out the pastebin for an example:
http://paste.yt-project.org/show/1803/

Let me know if it works/if it is insanely slow/how it could be improved!

Best,
Sam

On Tue, Sep 13, 2011 at 5:35 PM, Elizabeth Tasker <taskere at mcmaster.ca>wrote:

> Hi Matt,
>
> I actually use that to get my initial sweep of objects and it works great.
> This next step through it more complex than just a contour, since it's not
> obvious what my boundary line will be: it depends on the environment of each
> object which gives saddle points in the potential field. (This is why this
> program is taking me a while. *One day* it will be complete and work and I
> will win at life. Yes.)
>
> I'm good with covering grids, honest. I was just seeing if I could be
> smarter easily.
>
> Elizabeth
>
>
>
>
> Matthew Turk wrote:
>
>> Hi Elizabeth,
>>
>> We have an "extract_connected_sets" routine that may work for what you
>> are doing.  This is what the clump finder is built on.  You can supply
>> it a threshold, and it will conduct FOF on the cells, returning
>> objects (and boundary values) that satisfy it.  Unfortunately, right
>> now it only works with threshholding in one dimension.  So, what you
>> can do is define a field that returns 1/0 for whether it should be
>> included, and then perform the contouring with extract_connected_sets
>> on your initial data object.
>>
>> -Matt
>>
>> On Tue, Sep 13, 2011 at 5:22 PM, Elizabeth Tasker <taskere at mcmaster.ca>
>> wrote:
>>
>>
>>> Hi Matt and Sam,
>>>
>>> I just want to do a friends-of-friends scheme where I add cells to an
>>> ordered list if their properties (density, Potential field etc) satisfy
>>> my
>>> criteria.
>>>
>>> Unfortunately, that does mean that I might walk completely off one grid,
>>> ghost zones and all, and onto another one, so I think what Matt suggests
>>> below only buys me a few extra steps.
>>>
>>> Sam, your routine probably was what I was thinking of, but my question
>>> wasn't supposed to cause extra work! It was more a "does this exist and
>>> everyone is using it apart from me?" query. I'll keep with extracted
>>> grids
>>> and then if I run into issues or this later morphs into a useful analysis
>>> routine that people want to use or parallelise, perhaps we'll revisit the
>>> question of using trees.
>>>
>>> Thanks again,
>>>
>>> Elizabeth
>>>
>>> Matthew Turk wrote:
>>>
>>>
>>>> Elizabeth,
>>>>
>>>> If you request ghost zones you can do this.  In particular, requested
>>>> unsmoothed ghost zones will ensure no interpolation occurs.  You can
>>>> do this either by yourself, grid by grid with
>>>> grid_obj.retrieve_ghost_zones(**...) or you can use ValidateSpatial in
>>>> a
>>>> field definition.
>>>>
>>>> It might help if you shared what kind of operation you want to do once
>>>> you have the 26.  If you have the index of a cell, you can just
>>>> access:
>>>>
>>>> grid[field][index_i+1, index_j+1, index_k+1]
>>>>
>>>> and do the +/- and 0/1 modifications.
>>>>
>>>> -Matt
>>>>
>>>> On Tue, Sep 13, 2011 at 5:04 PM, Elizabeth Tasker <taskere at mcmaster.ca>
>>>> wrote:
>>>>
>>>>
>>>>
>>>>> Hi Stephen,
>>>>>
>>>>> Honestly, I was just hoping there was some magically pre-programmed way
>>>>> to
>>>>> grab the 26 most refined neighbours of a cell, regardless of which grid
>>>>> they
>>>>> were on or level that happened to be. Mapping to an extracted region is
>>>>> no
>>>>> hassle, I was just checking there wasn't a smart, quick way of doing
>>>>> this
>>>>> already.
>>>>>
>>>>> Thanks for the info!
>>>>>
>>>>> Elizabeth
>>>>>
>>>>>
>>>>>
>>>>> Stephen Skory wrote:
>>>>>
>>>>>
>>>>>
>>>>>> Elizabeth,
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>> So ... how hard are we talking? :)
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>> The thing is, in all honesty the kdtree we're using in yt (in
>>>>>> parallelHF and in a few other places) is not very convenient. It's
>>>>>> written in fortran, so the array orderings are backwards from the rest
>>>>>> of python (which is C based). It's also confusing to use, it has a
>>>>>> weird wrapper to access the functions that isn't very easy to
>>>>>> understand. The only reason we're using it is in my tests I found this
>>>>>> kdtree implementation to be significantly faster than the alternatives
>>>>>> out there.
>>>>>>
>>>>>> Perhaps if I knew a bit more about what you wanted to do I could help
>>>>>> you come up with a solution that avoids the kdtree. Are you interested
>>>>>> in only the nearest 6 touching cells to a cell? Or do you want to look
>>>>>> at the edges and the corners? Farther out? Do you care about
>>>>>> periodicity? You mentioned looking at grids of coarser resolution, do
>>>>>> you still think you'd like to have neighbor cells returned from a
>>>>>> lower resolution grid?
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>> ______________________________**_________________
>>>>> yt-users mailing list
>>>>> yt-users at lists.spacepope.org
>>>>> http://lists.spacepope.org/**listinfo.cgi/yt-users-**spacepope.org<http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org>
>>>>>
>>>>>
>>>>>
>>>>>
>>>> ______________________________**_________________
>>>> yt-users mailing list
>>>> yt-users at lists.spacepope.org
>>>> http://lists.spacepope.org/**listinfo.cgi/yt-users-**spacepope.org<http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org>
>>>>
>>>>
>>>>
>>> ______________________________**_________________
>>> yt-users mailing list
>>> yt-users at lists.spacepope.org
>>> http://lists.spacepope.org/**listinfo.cgi/yt-users-**spacepope.org<http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org>
>>>
>>>
>>>
>> ______________________________**_________________
>> yt-users mailing list
>> yt-users at lists.spacepope.org
>> http://lists.spacepope.org/**listinfo.cgi/yt-users-**spacepope.org<http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org>
>>
>>
>
> ______________________________**_________________
> yt-users mailing list
> yt-users at lists.spacepope.org
> http://lists.spacepope.org/**listinfo.cgi/yt-users-**spacepope.org<http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.spacepope.org/pipermail/yt-users-spacepope.org/attachments/20110914/39881dd4/attachment.htm>


More information about the yt-users mailing list