By Kurt Friday
I'm playing around with visualising clusters as a tree structure. I've got some nice code working that I thought I would share.
It's part of an abstract data viewer that I'm working on.
Code is based on Open_G Variant and Open_G Config File tools
I have been trying to understand what's going on with my tree control and I'd like to share this with the community to see if somebody has seen this behavior before. Maybe there is something obvious that I am not seeing...
I attached the VI (LV2011) with instructions inside (will take you 20s to perform the experiment, I dismantled the VI to its bare minimum). Please don't comment on the overall architecture (state machine...) since I modified the VI just for the sake of posting it here and removed all advanced features.
Long story short, after programmatically modifying the value of the tree, I modify its value a second time by clicking directly on one of the tree items. I then expect the NewVal value given through the left node of the value change event case to match the value of the tree terminal. Depending on the code that first modified the value programmatically, sometimes this expectation is met and sometimes it isn't. Run the code, it's easier to understand that way...
Thanks for your feedback!
Tree value issue.vi
I'm trying to create a better user interface for my tree navigation. The tree will ultimately have hundreds of items within it and I'm adding a search bar (simple string control).
I'm looking for someway to problematically hide all of branches that don't contain the search query but I can't find any methods or properties that can do this.
I am writing a performance-sensitive application which requires the use of a nearest-neighbor lookup. Originally I used a brute-force method, but unfortunately this gets to be very slow as the data size increases . I have a point cloud of ~100k points in 2D, and need around 50k nearest neighbor lookups per second as a minimum performance requirement.
As a solution I wrote a kd-tree in .Net and used LabView to call the .Net dll. However, I discovered that each .Net transaction carries with it about a 0.5ms delay. I've tried bunching the data up into groups, but this only helps so much, as I am using an iterative process.
Armed with my new-found kd-tree knowledge, I then wrote the kd-tree in LV-OOP, using DVRs for both subtrees and leaf values. However, my LV implementation is still 100x slower than the .Net implementation, and 20x slower than brute force. And this is with just 10k points.
I'm fairly new to LV (about 6 months in an academic environment) and I'm fairly sure I've made a massive blunder somewhere, but I don't have any idea what it might be.
http://robowiki.net/...d-tree_Tutorial is the tutorial that I used for writing both trees - note that I've only implemented a 1-NN lookup method, so have no need for the priority queue.
Just some notes:
I found using in-place data structure unbundle-bundle was much faster than using normal unbundle-bundle for all of the read/writes.
The tree started out with pure by-value subtrees and data, so was even slower before I changed to DVRs.
The lookup uses a queue as a stack, rather than being recursive. Not sure if this is good or bad.
The add element uses recursion. Again, not sure if this is good or bad.
I've written speed tests for brute force, .Net and LV lookups with names like with test_...... .vi if you want to compare performance.
Thanks in advance for any help