Efficient way to store and access 6 dimensional data?

Please support our Computer Science advertiser: Learn about neural networks and artificial intelligence.
Reply

Join Date: Oct 2007
Posts: 7
Reputation: Fox5 is an unknown quantity at this point 
Solved Threads: 0
Fox5 Fox5 is offline Offline
Newbie Poster

Efficient way to store and access 6 dimensional data?

 
0
  #1
Nov 19th, 2007
Hey all, I'm working on a project for school and I'd appreciate it if I could bounce a few ideas around.

Part of the project requires taking in a list of data with each value consisting of an xyz position in space and a uvw magnitude. The initial part of the project I'm concerned with is how to represent each point's uvw gradient.
As far as calculating the gradient goes, I think (though I'm not sure) that just taking the n most significant points for the gradient, up to all of the other points if desired, would be correct. However, would the gradient then be the sum of all the gradients, or the average?

Past that, I'm not sure how to deal with the data. I suppose I'd need a nested data structure, such as arrays of arrays or trees of trees to handle it. With arrays, I could make a 3 dimensional array and insert each value in its order positioned, and I think the only downside would be the poor insertion performance of arrays. On top of that, I think I'd need arrays for each point from there storing at least the n most significant points. I think this would allow me to quickly access any points, as well as compute the gradient for up to n-neighbors.

Alternatively, I could do binary search trees, but other than avoiding the insertion penalty of arrays they don't seem to offer most benefit, from what I can tell anyhow. It seems that in any case, they'll take significantly longer to access data than arrays would. If this was an optimization problem I suppose they'd be superior, but it doesn't seem there's any other way to approach this than brute force.
Reply With Quote Quick reply to this message  
Join Date: Jun 2005
Posts: 2,055
Reputation: Rashakil Fol is just really nice Rashakil Fol is just really nice Rashakil Fol is just really nice Rashakil Fol is just really nice 
Solved Threads: 139
Team Colleague
Rashakil Fol's Avatar
Rashakil Fol Rashakil Fol is offline Offline
Super Senior Demiposter

Re: Efficient way to store and access 6 dimensional data?

 
1
  #2
Nov 20th, 2007
Take a look at the kd-tree and octree datastructures on Wikipedia. I think a kd-tree or octree would work for you. I'm assuming you have randomly scattered pairs of points, not some lattice of calculated values. (Which do you have?)

Be more clear in your description. First of all, why would you have trouble representing your gradient? It's a triple of real numbers. I don't know what language you're using, but this is easy to do.

As for calculating the gradient, I take it you mean you want to interpolate. Search for interpolation methods online. If linear interpolation is sufficient, you'd want to find the four nearest neighbors and use them to get a linear function of gradient w.r.t. position. (It's just solving a linear system of equations.) If you need some other kind of interpolation (approximating second derivatives, etc), I don't really know anything about those methods (I could make up a few on the spot that would work, but wouldn't be ideal), but if you told me what you were thinking, I could tell you if it makes sense.
Last edited by Rashakil Fol; Nov 20th, 2007 at 3:04 am.
All my posts may be redistributed under the GNU Free Documentation License.
Reply With Quote Quick reply to this message  
Join Date: Oct 2007
Posts: 7
Reputation: Fox5 is an unknown quantity at this point 
Solved Threads: 0
Fox5 Fox5 is offline Offline
Newbie Poster

Re: Efficient way to store and access 6 dimensional data?

 
0
  #3
Nov 20th, 2007
Actually, the kd-tree looks great for what I'm doing.

As far as the gradient goes, I'm just not sure what the correct procedure for calculating it is. A gradient points in the direction of greatest change (and has the greatest magnitude of any direction), but I'm assuming to find this at a point you would have to treat your point as being part of many two particle systems. That is, find the gradient of the point you're interested in and every other point and then sum those gradients to find the true gradient.

Also, since it's 6 dimensional, 3d dimensional position plus 3 dimensional magnitude, would you take the gradient of the 6d vector or you take the gradient of just the uvw magnitudes, and weight those with respect to the distance (say using linear interpolation)?
Using the definition of the gradient I'd think the former, but it doesn't make logical sense to me. If two points are equal magnitude, the closer one should have a greater effect than the one farther away...actually I think I'm thinking about this wrong.
Rather than 6-dimensional, I should probably be thinking of the xyz position as x-initial, y-initial, z-initial, so the equations I'm interested in are:
(x-a_i)/u = (y-y_i)/v = (z-z_i)/w
Reply With Quote Quick reply to this message  
Join Date: Jun 2005
Posts: 2,055
Reputation: Rashakil Fol is just really nice Rashakil Fol is just really nice Rashakil Fol is just really nice Rashakil Fol is just really nice 
Solved Threads: 139
Team Colleague
Rashakil Fol's Avatar
Rashakil Fol Rashakil Fol is offline Offline
Super Senior Demiposter

Re: Efficient way to store and access 6 dimensional data?

 
1
  #4
Nov 24th, 2007
I wouldn't say it's 6-dimensional. What does dimension even mean in this context? You have pairs of three-dimensional points.

What do you mean by 'gradient'? Do you know what you mean? The term 'gradient' generally refers to functions that map values in R^n into R (where R is the set of real numbers, R^n the set of n-tuples of real numbers). For functions that map value in R^3 into R^3 (which your set of points represents?) there is no such thing as the 'gradient'. There is however, the generalization of the gradient, known as the Jacobian (which is more like a generalization of the derivative of a single-variable function). You'd get a 3x3 matrix for the Jacobian of a function f : R^3 -> R^3.

So is your set of points a set of gradients of some other implicit function? Or is it a function of which you want to take the Jacobian? You seem to be unclear about what you want.
All my posts may be redistributed under the GNU Free Documentation License.
Reply With Quote Quick reply to this message  
Join Date: Oct 2007
Posts: 7
Reputation: Fox5 is an unknown quantity at this point 
Solved Threads: 0
Fox5 Fox5 is offline Offline
Newbie Poster

Re: Efficient way to store and access 6 dimensional data?

 
0
  #5
Nov 24th, 2007
I'm honestly not sure what I want myself.

I have data with a bunch of points with associated strengths in each direction. I'm supposed to output an image of velocity vectors. I was thinking velocity in terms of rate of change and thus assumed the goal was to find the rate of change at any point, but now I'm not so sure. It may very well be that the uvw values are the velocity values of something, and all I'm required to do is plot the values. It hasn't been made clear to me one way or the other, all I know is that the data consists of points with associated magnitudes that may be actual velocities, temperatures, or whatever other measurements are taken.

This is for a course/internship I'm taking that's roughly on information visualization, and this is the first part of a larger project.

And from this wikipedia page on the gradient
http://en.wikipedia.org/wiki/Gradient
The 2d fields at the top seem to be what I want to do, but extended to 3d. However, I'm not sure how to do that without a function but with just data.
Reply With Quote Quick reply to this message  
Reply

This thread is more than three months old.
Perhaps start a new thread instead?
Message:




Views: 1289 | Replies: 4
Thread Tools Search this Thread



Tag cloud for Computer Science
About Us | Contact Us | Advertise | DaniWeb | Acceptable Use Policy | RSS Feed

©2003 - 2009 DaniWeb® LLC