phpnum
phpnum 是 PHP 语言的一个科学计算扩展。支持多维数组运算,此外也为数组运算提供了大量数学函数库。灵感源自 NumPy & NumPHP。
开发方向
支持线程安全
提供异常处理
完善函数库
支持算数符号运算
支持矩阵运算
内存优化
文档目录
安装/配置
需求
PHP 7 +
安装
下载phpnum最新版本,解压缩后,进入phpnum源码目录, 依次执行(其中PHP_BIN是PHP的bin目录)
$PHP_BIN/phpize
./configure --with-php-config=$PHP_BIN/php-config
make && make install
在php.ini中载入num.so,重启PHP。
类与方法
基本用法
Class Num
说明: 创建Num对象
范例
$num = new Num();
Class NumNdarray
说明: 创建数组对象
参数
array: Array
返回值
ndarray: Object
范例
$num = new Num();
$ndarray = $num->array([[1.0, 2, 3], [2, 3, 4]]);
Printing
说明: 输出数组对象
范例
$num = new Num();
$ndarray = $num->array([[1.0, 2, 3], [2, 3, 4]]);
echo $ndarray;
/* output:
array([
[1,2,3],
[2,3,4]
])
*/
属性
getData - 获取数组对象的原始数据
getShape - 获取数组对象的各维度大小
getNdim - 获取数组对象的维度
getSize - 获取数组对象的元素个数
getData
说明: 获取数组对象的原始数据
参数
None
返回值
data: Array
范例
$ndarray = $num->array([[1.0, 2, 3], [2, 3, 4]]);
$ndarray->getData(); // returns array([1.0, 2, 3], [2, 3, 4])
getShape
说明: 获取数组对象的各维度大小
参数
None
返回值
shape: Array
范例
$ndarray = $num->array([[1.0, 2, 3], [2, 3, 4]]);
$ndarray->getShape(); // returns array(2, 3)
getNdim
说明: 获取数组对象的维度
参数
None
返回值
ndim: LONG
范例
$ndarray = $num->array([[1.0, 2, 3], [2, 3, 4]]);
$ndarray->getNdim(); // returns 2
getSize
说明: 获取数组对象的元素个数
参数
None
返回值
size: LONG
范例
$ndarray = $num->array([[1.0, 2, 3], [2, 3, 4]]);
$ndarray->getSize(); // returns 6
统计
amin - 获取数组对象的最小元素
amax - 获取数组对象的最大元素
amin
说明: 获取数组对象的最小元素
参数
ndarray: Object
返回值
amin: Double
范例
$ndarray = $num->array([[3.2, 1.5, 1], [2.5, 4, 2]]);
$num->min($ndarray); // returns 1
amax
说明: 获取数组对象的最大元素
参数
ndarray: Object
返回值
amax: Double
范例
$ndarray = $num->array([[3.2, 1.5, 1], [2.5, 4, 2]]);
$num->amax($ndarray); // returns 4
算数运算
add - 加上数组对象
sub - 减去数组对象
mult - 乘以数组对象
div - 除以数组对象
add
说明: 加上数组对象
参数
ndarray: Object
返回值
ndarray: Object
范例
$a = $num->array([[1.0, 2, 3], [2, 3, 4]]);
$b = $num->array([[3.2, 1.5, 1], [2.5, 4, 2]]);
echo $a->add($b);
/* output:
array([
[4.2,3.5,4],
[4.5,7,6]
])
*/
sub
说明: 减去数组对象
参数
ndarray: Object
返回值
ndarray: Object
范例
$a = $num->array([[1.0, 2, 3], [2, 3, 4]]);
$b = $num->array([[3.2, 1.5, 1], [2.5, 4, 2]]);
echo $a->sub($b);
/* output:
array([
[-2.2,0.5,2],
[-0.5,-1,2]
])
*/
mult
说明: 乘以数组对象
参数
ndarray: Object
返回值
ndarray: Object
范例
$a = $num->array([[1.0, 2, 3], [2, 3, 4]]);
$b = $num->array([[3.2, 1.5, 1], [2.5, 4, 2]]);
echo $a->mult($b);
/* output:
array([
[3.2,3,3],
[5,12,8]
])
*/
div
说明: 除以数组对象
参数
ndarray: Object
返回值
ndarray: Object
范例
$a = $num->array([[1.0, 2, 3], [2, 3, 4]]);
$b = $num->array([[3.2, 1.5, 1], [2.5, 4, 2]]);
echo $a->div($b);
/* output:
array([
[0.3125,1.3333333333333,3],
[0.8,0.75,2]
])
*/
通用方法
power - 遍历数组计算次幂
square - 遍历数组计算平方
sqrt - 遍历数组计算平方根
exp - 遍历数组计算自然常数e的次幂
log - 遍历数组计算自然对数
log10 - 遍历数组计算以10为底的对数值
sin - 遍历数组计算正弦值
cos - 遍历数组计算余弦值
tan - 遍历数组计算正切值
ceil - 遍历数组计算向上取整
floor - 遍历数组计算向下取整
fabs - 遍历数组计算绝对值
power
说明: 遍历数组计算次幂
参数
base: Object
exponent: Object or Double
返回值
array: Array
范例
$ndarray = $num->array([[0.5, 1], [0, 2]]);
$num->power($ndarray, 3);
// returns array([[0.125, 1.0], [0.0, 8.0]])
square
说明: 遍历数组计算平方
参数
ndarray: Object
返回值
array: Array
范例
$ndarray = $num->array([[0.5, 1], [0, 2]]);
$num->square($ndarray);
// returns array([[0.5, 1.0], [0.0, 4.0]])
sqrt
说明: 遍历数组计算平方根
参数
ndarray: Object
返回值
array: Array
范例
$ndarray = $num->array([[0.5, 1], [0, 2]]);
$num->sqrt($ndarray);
// returns array([[0.70710678118654757, 1.0], [0.0, 1.4142135623730951]])
exp
说明: 遍历数组计算自然常数e的次幂
参数
ndarray: Object
返回值
array: Array
范例
$ndarray = $num->array([[0.5, 1], [0, 2]]);
$num->exp($ndarray);
// returns array([[1.6487212707001282, 2.7182818284590451], [1.0, 7.3890560989306504]])
log
说明: 遍历数组计算自然对数
参数
ndarray: Object
返回值
array: Array
范例
$ndarray = $num->array([[0.5, 1], [10, 2]]);
$num->log($ndarray);
// returns array([[-0.69314718055994529, 0.0], [2.3025850929940459, 0.69314718055994529]])
log10
说明: 遍历数组计算以10为底的对数值
参数
ndarray: Object
返回值
array: Array
范例
$ndarray = $num->array([[1e-1, 1], [10, 100]]);
$num->log10($ndarray);
// returns array([[-1.0, 0.0], [1.0, 2.0]])
sin
说明: 遍历数组计算正弦值
参数
ndarray: Object
返回值
array: Array
范例
$ndarray = $num->array([[0.5, 1], [0, 2]]);
$num->sin($ndarray);
// returns array([[0.47942553860420301, 0.8414709848078965], [0.0, 0.90929742682568171]])
cos
说明: 遍历数组计算余弦值
参数
ndarray: Object
返回值
array: Array
范例
$ndarray = $num->array([[0.5, 1], [0, 2]]);
$num->cos($ndarray);
// returns array([[0.87758256189037276, 0.54030230586813977], [1.0, -0.41614683654714241]])
tan
说明: 遍历数组计算正切值
参数
ndarray: Object
返回值
array: Array
范例
$ndarray = $num->array([[0.5, 1], [0, 2]]);
$num->tan($ndarray);
// returns array([[0.54630248984379048, 1.5574077246549023], [0.0, -2.1850398632615189]])
ceil
说明: 遍历数组计算向上取整
参数
ndarray: Object
返回值
array: Array
范例
$ndarray = $num->array([[0.5, 1], [0, 2]]);
$num->ceil($ndarray);
// returns array([[1.0, 1.0], [0.0, 2.0]])
floor
说明: 遍历数组计算向下取整
参数
ndarray: Object
返回值
array: Array
范例
$ndarray = $num->array([[0.5, 1], [0, 2]]);
$num->floor($ndarray);
// returns array([[0.0, 1.0], [0.0, 2.0]])
fabs
说明: 遍历数组计算绝对值
参数
ndarray: Object
返回值
array: Array
范例
$ndarray = $num->array([[0.5, -1], [0, -2]]);
$num->fabs($ndarray);
// returns array([[0.0, 1.0], [0.0, 2.0]])