Posted on January 4, 2012 @ 01:12:29 PM by Paul Meagher
Currently reading some books on Matlab (so that I can program in it's opensource version, Octave, better). In Matlab/Octave you can construct a matrix like so:
mat = [1:3; 4:6]
1 2 3
4 5 6
Perhaps in PHP we should be able to do something similiar like this:
$A = mat('1:3; 4:6');
Where mat(' replaces [ and '); replaces ]. Implementing a
mat function like this would require implementing 1) a parser for the expression between single quotes (or double quotes), and 2) a code generator that uses the parsed expression to generate the appropriate array or nested arrays.
In the matrix constructor for the JAMA package, there are methods to "fill" the arrays with values but they are very primative compared to matlab/octaves notation for constructing filled matrices. The proposed "mat" function could work in a very complementary way with JAMA's matrix constructor.
mat function is only one matrix manipulation function that php might implement to make matrix manipulation easier. Other functions that would be useful are
repmat. Matlab's/Octave's method for transposing a matrix involves using a single quote operator
' outside the right bracket (e.g.,
mat = [1:3; 4:6]') that might be functionalized as a
trans operator. Finally, Matlab/Octave also supports an expressive language for accessing the contents of a matrix that would also be useful to have. One possibility is that the
mat function might take a second argument, a matrix, that would be accessed via an expression between the single quotes of the first argument like so:
$b = mat('end, 1', $A);
Which equates to:
$b = 4;
I would argue that for PHP to be a usable language for matrix manipulation it should offer matrix manipulation functions like the Matlab/Octave ones proposed here. A few functions like these, inspired by the way Matlab/Octive implements these functions, would take PHP a long way towards being a useful matrix manipulation language. They would be complementary with the JAMA Linear Algebra Package and would make it easier to port Matlab/Octave-based matrix algorithms to PHP. Many vectorized algorithms require the ability to efficiently slice and dice matrices as the algorithm proceeds towards a solution which is what these methods provide.