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

Tensor templates

Rate me:
Please Sign up or sign in to vote.
5.00/5 (6 votes)
26 Jun 2001 105K   1.9K   29   14
A template class that enable you to make tensors with any dimensionality. Process convolution of any tensors and so on.

Introduction

The Tensor class was written in 1997 during my study of templates (I found it examining my archives).

But I've not seen any such classes since. So I think it can be useful for students. The main reason I've wrote it - for the convolution of tensors with any dimensionality. Also you can get and use any sub-tensor using operator[], for example Sample Image can be written like

Tensor2 qq,a1,a2,aa;
convolution(aa["li"],a2["lj"],qq["ij"]);
convolution(qq["kl"],a1["ki"],aa["li"]);

Using

The demo project shows usage of tensors. You can:

Declare and init tensors (you should specify dimension and indexes range).

Tensor2 result2(2);
Tensor4 tt(3);  // 4 - dimensions indexes can be 0-2 or "1"-"3"
Tensor2 t1(2);       t1[0][0] = 1.0;
                     t1[1][0] = 2.0;
                     t1[0][1] = 3.0;
                     t1[1][1] = 4.0;

Convolute tensors - note that you can use different dimensions and one or more constants in indices.

convolution(result5["2i"],t3["2"],t2["i3"]);
convolution(result6["ij"],t1["ja"],t2["ai"]);

Use some arithmetical operations.

result3 = t1 + t2*2;

Print part or whole tensor.

t4["ijkl"].printf(std::cout);
result5["1j"].printf(std::cout);

Average tensors.

Tensor2 t[2];
double q[2];
t2.averaging(&t[0],q,2);

Invert 4-dimension tensor with indexes (0,1).

Tensor4 t(2),ti(2);
ti = inverse(t);

To Do list

It can be easy to implement some more operations with tensors (different multiplication and so). Please let me know, if you need some.

Note

Make sure to check out the my web site which is more likely to have updates and betas: http://www.zmike.net

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Web Developer
Russian Federation Russian Federation
Mike has been programming in C/C++ for 11 years and Visual C++/MFC for 4 years. His background includes pure and applied mathematics, engineering and physics, and he is currently based in Moscow, Russia.

Comments and Discussions

 
Generallinear algebra Pin
VeganFanatic9-Jun-10 15:22
VeganFanatic9-Jun-10 15:22 
GeneralIntroduction to Tensor Convolution Pin
Pho3NiX15-Aug-09 7:52
Pho3NiX15-Aug-09 7:52 
GeneralGeneral comment Pin
dardiern24-Feb-08 23:08
dardiern24-Feb-08 23:08 
Not to over-simplify but aren't tensor's just glorified vectors? interesting library a vote of 5 coming your way. Smile | :)
GeneralRe: General comment Pin
Mike Melnikov1-Mar-08 0:26
Mike Melnikov1-Mar-08 0:26 
General[Message Deleted] Pin
Danny Rodriguez27-Jan-08 9:41
Danny Rodriguez27-Jan-08 9:41 
Generalthis is good! Pin
yulin1114-Jun-07 3:50
yulin1114-Jun-07 3:50 
GeneralTensors, great fun! ;) Pin
PedroMC10-Aug-05 23:48
PedroMC10-Aug-05 23:48 
GeneralRe: Tensors, great fun! ;) Pin
yulin1114-Jun-07 3:52
yulin1114-Jun-07 3:52 
Generalthk u Pin
syit31515-May-04 4:37
syit31515-May-04 4:37 
GeneralWell Done ! Pin
ColinDavies6-Jul-02 0:42
ColinDavies6-Jul-02 0:42 
GeneralRe: Well Done ! Pin
Mike Melnikov10-Aug-02 3:11
Mike Melnikov10-Aug-02 3:11 
GeneralI'm ashamed to ask but... Pin
Daniel Turini22-Dec-01 4:17
Daniel Turini22-Dec-01 4:17 
GeneralRe: I'm ashamed to ask but... Pin
Mike Melnikov26-Dec-01 21:01
Mike Melnikov26-Dec-01 21:01 
GeneralRe: I'm ashamed to ask but... Pin
Jerry Jeremiah14-Mar-06 13:56
Jerry Jeremiah14-Mar-06 13:56 

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.