|Last Updated|| ||Ratings|| ||Unique User Downloads|| ||Download Rankings|
|2021-06-14 (11 months ago) ||Not yet rated by the users||Total: 41 ||All time: 10,339 This week: 204|
|Version|| ||License|| ||PHP version|| ||Categories|
|np 0.0.1||Custom (specified...||8||Math, PHP 8, FFI|
This package can manipulate matrices with Lapack and OpenBlas libraries.
It uses the PHP FFI extension to call the Lapack and OpenBlas and perform several types of operations with matrices. Currently, it can :
- Matrices decomposition (LU, SVD, Eigen, Cholesky)
- Matrices Signal-processing (1D, 2D Convolution)
- Poisson,Gaussian Matrices
- Calculate the product of a general matrix and another general matrix
- Calculate the product of a symmetric matrix and a general matrix
- Update rank n of a symmetric matrix
- Update rank 2k of a symmetric matrix
- Compute the product of a general matrix and a vector stored in a band format.
- Compute the product of a column vector and a row vector. (Real number)
- Calculates the index of the element with the largest absolute value in the vector.
- Calculates the index of the element with the smallest absolute value in the vector.
- Exchange the contents of the vector.
- Compute the Euclidean norm of a vector.
- Add vectors
- Calculates the sum of the absolute values of each component of the vector.
- Rotate about a given point.
- Given the point P (a, b), rotate this point to givens and calculate the parameters a, b, c, and s to make the y coordinate zero.
- Multiply a vector by a scalar.
|Matrix manipulation is often used to perform complex calculations for scientific purposes.
Many of those calculations require a lot of processing. So when it is possible to perform those calculations in a lower-level programming language like C or C++, those calculations can be done much faster.
This package allows performing many types of matrix manipulation operations using libraries written in the C/C++ languages.
Then using the FFI extension, PHP applications can call those libraries to get much higher performance when doing those calculations than they could use pure PHP libraries.
Lite, Fast & Memory Efficient Mathematical PHP library for scientific computing
Np(numphp) is a library that provides objects for computing large sets of numbers in PHP.
Install Np into your project with Composer:
$ composer require ghostjat/np
require __DIR__ . '/../vendor/autoload.php';
$ta = matrix::randn(1000, 1000);
$tb = matrix::randn(1000, 1000); // to generate random 2d matrix
$ta->dot($tb); // do a dot operation on given matrix
$ta->getMemory(); // get memory use
$ta->time(); // get time
* Time-Consumed:- 0.18390893936157
This module is in its early stages and should be considered a Work in Progress.The interface is not final and may change in the future.
PHP 8+ 64bit with ffi & #libblas, #liblapacke
Make sure you have all the necessary tools installed such as FFI, libblas, liblapacke.
System Conf:- Intel(R) Core(TM) i3-2370M CPU @ 2.40GHz 64bit
php:- 8.0.5 64bit
Current Benchmarks of this library
Data Size :- [500x500] Revolutions:- 5 Iterations:- 5
| subject | mem_peak | best | mode | mean | worst | stdev |
| sum | 3.606mb | 0.014s | 0.014s | 0.015s | 0.015s | 0.000s|
| multiply | 8.589mb | 0.070s | 0.071s | 0.071s | 0.071s | 0.000s|
| lu | 4.648mb | 0.064s | 0.065s | 0.065s | 0.068s | 0.001s|
| eign | 2.801mb | 0.085s | 0.086s | 0.086s | 0.088s | 0.001s|
| cholesky | 1.621mb | 0.001s | 0.001s | 0.001s | 0.001s | 0.000s|
| svd | 3.706mb | 0.126s | 0.126s | 0.127s | 0.133s | 0.002s|
| normL2 | 1.621mb | 0.003s | 0.003s | 0.003s | 0.003s | 0.000s|
| Pinverse | 4.903mb | 0.156s | 0.156s | 0.158s | 0.163s | 0.003s|
| inverse | 1.819mb | 0.016s | 0.016s | 0.016s | 0.017s | 0.000s|
| normL1 | 1.621mb | 0.001s | 0.001s | 0.001s | 0.001s | 0.000s|
| dotMatrix| 3.769mb | 0.006s | 0.006s | 0.006s | 0.006s | 0.000s|
| det | 4.662mb | 0.066s | 0.066s | 0.067s | 0.067s | 0.000s|
| rref | 1.529mb | 9.227s | 9.271s | 9.309s | 9.427s | 0.072s|
| ref | 1.818mb | 0.007s | 0.008s | 0.008s | 0.008s | 0.000s|
| clip | 8.516mb | 0.073s | 0.076s | 0.075s | 0.077s | 0.002s|
| clipUpper| 8.516mb | 0.055s | 0.056s | 0.057s | 0.059s | 0.002s|
| clipLower| 8.516mb | 0.055s | 0.058s | 0.057s | 0.059s | 0.002s|
| joinBelow| 4.517mb | 0.027s | 0.027s | 0.027s | 0.028s | 0.000s|
| transpose| 8.504mb | 0.057s | 0.057s | 0.058s | 0.059s | 0.001s|
| joinLeft | 4.511mb | 0.025s | 0.025s | 0.026s | 0.027s | 0.001s|
| poisson | 1.590mb | 0.029s | 0.029s | 0.029s | 0.030s | 0.000s|
| gaussian | 20.203mb | 0.056s | 0.056s | 0.056s | 0.056s | 0.000s|
| randn | 1.528mb | 0.017s | 0.017s | 0.017s | 0.017s | 0.000s|
| uniform | 1.528mb | 0.021s | 0.021s | 0.021s | 0.022s | 0.000s|
| multiply | 4.507mb | 0.042s | 0.042s | 0.043s | 0.045s | 0.001s|
| benchmark | subject | set | revs | its | mem_peak | mode | rstdev |
| eignBench | eign | 0 | 1 | 5 | 2.699mb | 0.309s | ±4.51% |
| svdBench | svd | 0 | 1 | 5 | 3.604mb | 0.148s | ±3.60% |
| poissonMatrixBench | poisson | 0 | 1 | 5 | 11.738mb | 0.105s | ±7.07% |
| gaussianMatrixBench | gaussian | 0 | 1 | 5 | 11.738mb | 0.112s | ±17.12% |
| randMatrixBench | randn | 0 | 1 | 5 | 1.429mb | 0.048s | ±2.37% |
| uniformMatrixBench | uniform | 0 | 1 | 5 | 1.429mb | 0.063s | ±8.16% |
| matrixTransposeBench | transpose | 0 | 1 | 5 | 8.431mb | 0.120s | ±1.32% |
| rrefBench | rref | 0 | 1 | 5 | 1.501mb | 28.513s | ±1.90% |
| refBench | ref | 0 | 1 | 5 | 1.731mb | 0.023s | ±7.24% |
| sumMatrixBench | sum | 0 | 1 | 5 | 2.434mb | 0.051s | ±3.59% |
| matrixPseudoInverseBench | inverse | 0 | 1 | 5 | 4.775mb | 0.222s | ±13.76% |
| matrixInverseBench | inverse | 0 | 1 | 5 | 1.731mb | 0.032s | ±127.50% |
| dotMatrixBench | dotMatrix | 0 | 1 | 5 | 3.656mb | 0.013s | ±27.94% |
| matrixL1NormBench | normL1 | 0 | 1 | 10 | 1.525mb | 0.001s | ±0.80% |
| matrixL2NormBench | normL2 | 0 | 1 | 10 | 1.525mb | 0.003s | ±1.63% |
The code is licensed MIT and the documentation is licensed CC BY-NC 4.0.
Shubham Chaudhary <email@example.com>
||Applications that use this package
No pages of applications that use this class were specified.
If you know an application of this package, send a message to the author to add a link here.