Source code for tensor.h

/* tensor.h
*
* Copyright (C) <2016>  Giuseppe Marco Randazzo
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef TENSOR_H
#define TENSOR_H
#include <stdio.h> #include <stdlib.h> #include "matrix.h" #include "vector.h" /* Giuseppe Marco Randazzo * Sun Dec 25 20:54:11 CET 2011 */
[docs]/** * Tensor data structure * * - **m** list of matrix * - **order** number of matrix layers */ typedef struct{
matrix **m;
size_t order;
}tensor;
[docs]/** * Initialize an empty tensor */ void initTensor(tensor **t);
[docs]/** * Create a new empty tensor with a predefined order. */ void NewTensor(tensor** t, size_t order_);
[docs]/** * Create into an empty tensor a matrix of "row x col" at position "order" * * @param [in] t input tensor * @param [in] order point where to add the matrix * @param [in] row number of rows of the matrix * @param [in] col number of columns of the matrix */ void NewTensorMatrix(tensor *t, size_t order, size_t row, size_t col);
[docs]/** * Append to a tensor a matrix at the end of it. * * @param [in] t input tensor * @param [in] row number of rows of the matrix * @param [in] col number of columns of the matrix */ void AddTensorMatrix(tensor *t, size_t row, size_t col);
[docs]/** * Delete a tensor and free up the memory. */ void DelTensor(tensor**t);
[docs]/** * Print to video the tensor. */ void PrintTensor(tensor *t);
/** * Set a value into a tensor */ void setTensorValue(tensor *t, size_t order, size_t row, size_t col, double val);
/** * Get a value from a tensor */ double getTensorValue(tensor *t, size_t order, size_t row, size_t col);
/** * Append a matrix to a tensor at the end of it. */ void TensorAppendMatrix(tensor *tdst, matrix *msrc);
/** * Append a matrix to a tensor in a specific position of it; */ void TensorAppendMatrixAt(tensor *tdst, size_t order, matrix *msrc);
/** * Append a column vector into the matrix of a tensor at position "order" */ void TensorAppendColumn(tensor *t, size_t order, dvector* column);
/** * Append a row vector into the matrix of a tensor at position "order" */ void TensorAppendRow(tensor *t, size_t order, dvector* row);
/** * Set all the values of a tensor to a specific value "val" */ void TensorSet(tensor *t, double val);
/** * Copy a tensor from a source into a destination */ void TensorCopy(tensor *asrc, tensor **adst);
/** * Calculate the mean centered tensor * */ void MeanCenteredTensor(tensor *t, tensor *tc);
/** * Calculate column average of each matrix in a tensor * */ void TensorColAverage(tensor *t, matrix *colaverage);
/** * Calculate column standard deviation of each matrix in a tensor */ void TensorColSDEV(tensor *t, matrix *colsdev);
/** * Transpose a tensor * */ void TensorTranspose(tensor *t1, tensor *t2);
/** * Calculate the transposed tensor x vector product. * The result is a matrix. * */ void TransposedTensorDVectorProduct(tensor *t, dvector *v, matrix *p);
/** * Calculate the vector x tensor product. * The result is a matrix. */ void DvectorTensorDotProduct(tensor *t, dvector *v, matrix *m);
/** * Calculate the tensor-matrix product * The result is a matrix. */ void TensorMatrixDotProduct(tensor *t, matrix *m, dvector *v);
/** * Calculate the Kroneker dot product between a vector and a matrix. * The result is a tensor. */ void KronekerProductVectorMatrix(dvector *v, matrix *m, tensor *t);
#endif