How to create a sparse vector of class objects

2 次查看(过去 30 天)
Dear all!
My aim is to write a class to handle locations in 3-d space (let's call it 'CoordinateClass'). Therefore I need to store the three coordinates (along with - at the moment - three other values) in an array. Each set of coordinate must have a unique ID. These IDs range from 0 to let's say 1e6 and are chosen by the user. The current solution is to use a sparse array. The coordinates are stored in the row corresponding to the ID.
What is the best way to get this scenario into a class? I could define a sparse array as the class property and work with that. But it is not as easy as to use a vector of objects like
C(1) = CoordinateClass([1 1 1 0 0 0]) % 3-d point at (1,1,1) with ID 1
C(100) = CoordinateClass([100 2 1 0 0 0]) % 3-d point at (100,2,1) with ID 100
The index is the user-defined ID. The problem is the memory usage. If I use large ID values all objects below are allocated as well. Is there a way to implement some kind of "sparse object" to decrease memory usage?
Thanks in advance

采纳的回答

Matt J
Matt J 2013-8-26
编辑:Matt J 2013-8-26
You don't want to have a separate C(i) for each coordinate. That will allocate memory very inefficiently. You want a single object which holds your coordinate and other data as an array, e.g.,
classdef CoordinateClass
properties
coordinates;
IDs;
ThreeOtherValues;
end
end
and now you would have
C.coordinates=[1 1 1; 100 2 1; etc...]
C.IDs=[1;100; etc...]
C.ThreeOtherValues=[0 0 0; 0 0 0; etc...]
  11 个评论
Matt J
Matt J 2013-8-30
编辑:Matt J 2013-8-30
Why does C.cart2pol go through subsref and cart2pol(C) not?
Because C.cart2pol is an indexing expression and cart2pol(C) is not. I assume you're referring to situations when these expressions are executed outside the class. Inside a class method, neither expression goes through subsref.
Simon
Simon 2013-8-30
Yes, your right, I execute the command from my test script. But inside the class the expression goes through subsref if I call it directly
sref = subsref(obj, s,)
(assumed the overloaded subsref handles this correctly) and not with
sref = builtin('subsref',obj,s);
That's ok.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Sample Class Implementations 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by