Click here to Skip to main content
15,886,795 members
Articles / Programming Languages / C++
Article

An STL-Like Vector With Matlab Indexing Facilities

Rate me:
Please Sign up or sign in to vote.
3.88/5 (7 votes)
3 Apr 2003GPL3 67.2K   366   17   12
An STL-Like Vector with Matlab indexing facilities.

Sample Image - mtVector.jpg

Introduction

Vector is the basic data structure in MATLAB. It provides easy, fast, effective, and scalable data structures giving programming an algebraic view for data, even for complex data structures. Matlab allows you do develop fast technical solutions. However, MATLAB loops, and UIs are too slow :o. It is your responsibility to reformulate your code and data structures into matrices and vectors.

For example, to sum up a vector, you can write a simple counting loop. However, it is faster to use inner product with a vector of ones.

mtVector, mtRefVector

mtVector provides an STL-like vector. Actually, it wraps std::vector. Mathematical and indexing operators are added.

typedef mtVector<int> intVector;
 intVector iv1(15,   /* 15 elements */

  0,1,2,3,4,5,6,7,8,9,10,11,12,13,14);

 intVector iv2(15,   /* 15 elements */

  0,10,20,30,40,50,60,70,80,90,100,110,120,130,140);

 print(iv1);

prints:

iv1= < 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 >

and,

print(iv1(4 to 12));

returns mtRefVector and prints:

iv1(4 to 12)= < 4 5 6 7 8 9 10 11 12 >

Similarly:

iv1(4 to 12)=iv2(4 to 12);
print(iv1);

assigns values in iv2(4..12) to elements in iv1(4..12), and prints:

iv1= < 0 1 2 3 40 50 60 70 80 90 100 110 120 13 14 >

Moreover, it extends to select elements given a vector of their indices:

intVector iv3(15, 0,1,2,1,2,0,2,0,1,1,0,4,4,0,4);

print(iv1(iv3.FindOnes()));

returns mtRefVector and prints:

iv1(iv3.FindOnes())= < 9 18 27 360 540 720 810 990 1080 126 >

I guess mtVector and mtRefVector provide simple intuitive way to access and play with vectors. Simply, we can sort iv1, iv2 and iv3 given index vector of any other sorted vector.

iv1(iv5.ISort());

gets indices that sorts iv5, and access iv1 in the same order.

License

This article, along with any associated source code and files, is licensed under The GNU General Public License (GPLv3)


Written By
Engineer
Australia Australia
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
Generalhelp help help Pin
haider prolog1-Aug-06 3:33
haider prolog1-Aug-06 3:33 
AnswerRe: help help help Pin
Mo Hossny1-Aug-06 15:07
Mo Hossny1-Aug-06 15:07 
QuestionHow to convert from a STL-vector Pin
FinEngineer8-Dec-04 7:03
FinEngineer8-Dec-04 7:03 
AnswerRe: How to convert from a STL-vector Pin
Mo Hossny8-Dec-04 21:03
Mo Hossny8-Dec-04 21:03 
QuestionHow using a vector index to select el. Pin
FinEngineer1-Dec-04 22:59
FinEngineer1-Dec-04 22:59 
AnswerRe: How using a vector index to select el. Pin
Mo Hossny2-Dec-04 13:58
Mo Hossny2-Dec-04 13:58 
GeneralRe: How using a vector index to select el. Pin
FinEngineer2-Dec-04 22:40
FinEngineer2-Dec-04 22:40 
GeneralRe: How using a vector index to select el. Pin
Mo Hossny5-Dec-04 1:39
Mo Hossny5-Dec-04 1:39 
Generalmatlab error Pin
Member 51156316-Dec-03 18:41
Member 51156316-Dec-03 18:41 
GeneralBoost multiarray library Pin
Jonathan de Halleux4-Apr-03 4:01
Jonathan de Halleux4-Apr-03 4:01 
Did you try it ? Boost multiarray page[^]

For example, with multiarray and range, you can do a lot. This is an example of the doc. range() is some kind of "index" object, myarray is a m x n x p matrix (could be of type R^n)
C++
// take all of dimension 1
// take i < 5 for dimension 2
// take 4 <= j <= 7 for dimension 3 with stride 2
myarray
    [ 
        boost::indices
           [range()]
           [range() < 5 ]
           [4 <= range().stride(2) <= 7] 
    ];


Jonathan de Halleux.
GeneralRe: Boost multiarray library Pin
Mo Hossny4-Apr-03 4:25
Mo Hossny4-Apr-03 4:25 
GeneralRe: Boost multiarray library Pin
Jonathan de Halleux4-Apr-03 4:27
Jonathan de Halleux4-Apr-03 4:27 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.