NAME

Math::Lapack::Matrix

VERSION

version 0.001

CONSTRUCTORS

zeros

Allow the creation of a matrix with all values equal to zero. Its arguments are the number of rows and the number of columns.

my $m = Math::Lapack::Matrix->zeros(10, 20);

ones

Allow the creation of a matrix with all values equal to one. Its arguments are the number of rows and the number of columns.

my $m = Math::Lapack::Matrix->random(5,10);

random

Allow the creation of a matrix with all values set randomly between 0 and 1. Its arguments are the number of rows and the number of columns.

my $m = Math::Lapack::Matrix->random(15,15);

identity

Allow the creation of a identity matrix. It argument is the size of the matrix.

my $m = Math::Lapack::Matrix->identity(5);

new

Allow the creation of a new matrix. It argument is a array of values to create the matrix.

$m = Math::Lapack::Matrix->new( [ [1, 2], [3, 4] ] );

DESTROY

Allow free the memory allocated by a matrix.

$m->DESTROY();

METHODS

get_element

Allow get specific element of matrix. Its arguments are the position in row and the position in column.

my $value = $m->get_element(1,2);

shape Allow get the dimension of the matrix.

($rows, $cols) = $m->shape();

set_element

Allow set element in matrix to specific position. Its arguments are the position in row, the position in column and the value to set to that position.

$m->set_element(1,0,10);

rows

Allow get the number of rows of a matrix.

$rows = $m->rows();

columns

Allow get the number of columns of a matrix.

$cols = $m->columns();

get_max

Allow get the max value of a matrix

my $max = $a->max();

get_min

Allow get the min value of a matrix

my $min = $a->min();

mean

Allow get the mean of values of a matrix

std_deviation

Allow get the standard deviation of the values of matrix

my $std = $a->std_deviation();

norm_mean

Allow normalize every column of matrix by the mean.

my $norm = $a->norm_mean();
This method will return a matrix with dimensions (a->columns, 2). This matrix have in the first row of every column the value max - min and in the second row of every column the mean that every column was normalized.

With this returned matrix you can normalize another matrix with same values of max-min and mean using the option by.

my $new = $b->norm_mean( by => $norm ); 

norm_std_deviation

Allow normalize every column of matrix by the standard deviation.

my $std = $a->norm_std_deviation();

This method will return a matrix with dimensions (a->columns, 2). This matrix have in the first row of every column the value mean and in the second row of every column the standard deviation that every column was normalized.

With this returned matrix you can normalize another matrix with same values of mean and standard deviation using the option "by".

my $new = $b->norm_mean( by => $std ); 

OPERATIONS

addition

Allow make adiction of matrix by a scalar or by another matrix. It argument is a scalar or matrix to add.

$m = $m + $b
$m = $m + 5;
$m = $m->add($b);
$m = $m->add(10);

subtraction

Allow make subtraction of matrix by a scalar or by another matrix. It argument is a scalar or matrix to subtract.

$m = $m - $b
$m = $m - 5;
$m = 5 - $m;
$m = $m->sub($b);
$m = $m->sub(10);

multiplication

Allow the multiplication of two matrices. Its arguments are the 2 matrices to multiply.

$A = Math::Lapack::Matrix->new( [ [1, 2], [3, 4] ] );
$B = Math::Lapack::Matrix->new( [ [5, 6], [7, 8] ] );

$C = $A->eval_dot($B);
$D = $A x $B;   # alternative using operator overload

multiplication element-wise

Allow multiply a matrix by a scalar or a matrix by a matrix element-wise. It argment is the scalar to multiply for every element of a matrix.

$m = $m * 5;
$m = 5 * $m;
$m = $a * $b;
$m = $m->mul(5);

division

Allow make the division of matrix by a scalar or by another matrix. It argument is a scalar or matrix to divide.

$m = $m / $b;
$m = $m / 2;
$m = 2 / $m;
$m = $m->eval_div($b);
$m = $m->eval_div(2);

transpose

Allow transpose a matrix.

$m = $m->transpose();
$m = transpose($m);
$m = $m->T;

inverse

Allow make the operation of inverse to the elements of the matrix.

$m = $m->inverse();
$m = inverse($m);

exp

Allow make the exponential operation to every element of the matrix.

$m = $m->exp();
$m = exp($m);

pow

Allow apply the power operation to every element of the matrix. It argument is the scalar to elevate every element of the matrix.

$m = $m->pow(2);
$m = pow($m,2);

log

Allow make the logarithm operation to every element of the matrix.

$m = $m->log();
$m = log($m);

concatenate

Allow the concatenation of two matrices, vertically. Its arguments are the two matrices to concatenate

	index = 0 => concatenate in horizontally
  index = 1 => concatenate in vertically
	
	If it's not used index, by default the function will concatenate horizontally
	
	my $m = Math::Lapack::Matrix::concatenate($a, $b);
	my $m = Math::Lapack::Matrix::concatenate($a, $b, 0);
	my $m = Math::Lapack::Matrix::concatenate($a, $b, 1);

append

Allow append a matrix, vertically. It argumet is the matrix to append.

	index = 0 => append in horizontally
  index = 1 => append in vertically
	
	If it's not used index, by default the function will append horizontally
	
	my $m = $a->append($b);
	my $m = $a->append($b,1);
	my $m = $a->append($b,0);

vector_to_list

Allow convert a vector with dimentions (m,1) or (1,m) to a list. where m is the number of elements and should be more than 1.

my @vector = $a->vector_to_list();

sum

Allow sum elements of a matrix in horizontally or vertically. It argument is a index that represent to sum in horizontally or vertically the elements of the matrix. If is not used index, the function sum will sum every element of the matrix.

    index = 0 => sum in horizontally
    index = 1 => sum in vertically

	$m = $m->sum(0);
	$m = sum($m,1);
	$m = sum($m);

slice

Allow slice over the elemenents of a matrix. It argument is a hash of options. The options are:

	row_range => an array with two values of row min and row max to slice
	col_range => an array with two values of col min and col max to slice
	row => specific row
	col => specific column
    
	my $A = Math::Lapack::Matrix->new( 
					[    
            [1, 2, 3, 4, 5, 6],
            [7, 8, 9, 10, 11, 12],
            [13, 14, 15, 16, 17, 18]
          ]);

	#Get Specific row, row 0
	$A->slice( row_range => [0,0] );
	$A->slice( row => 0 );
	slice($A, row => 0);
	slice($A, row_range => [0,0]);
	
	#Get rows 1,2 and columns 2,3,4,5
	slice($A, row_range => [1,2], col_range => [2,5] );
	$A->slice( row_range => [1,2], col_range => [2,5] );

	#Get column 4
	$A->slice( col_range => [4,4] );
	$A->slice( col => 4 );
	slice($A, col => 4);
	slice($A, col_range => [4,4]);

I/O

read_csv

x0 - min col
x1 - max col non inclusive
y0 - min row
y1 - max col non inclusive
####FIXME row - specific row
####FIXME col - specific col

save

Allow save a matrix to disk. It argument is the path to save the matrix.

$m->save("path");

save_matlab

Allow save matrix to matlab format. It argument is the path to save.

$m->save_matlab("path.m");

read_matrix

Allow read a matrix to memory from disk. It argument is the path to the file where the matrix as saved before.

$m = Math::Lapack::matrix->read_matrix("path");

AUTHOR

Rui Meira

COPYRIGHT AND LICENSE

This software is copyright (c) 2018-2019 by Rui Meira.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.