65.9K
CodeProject is changing. Read more.
Home

Tensor templates

starIconstarIconstarIconstarIconstarIcon

5.00/5 (6 votes)

Jun 27, 2001

viewsIcon

107328

downloadIcon

1922

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