xt_plugin
TSL语言的跨平台实现的扩展的有类型的数据结构插件,目前提供xarray数组,将来还会提供更多的扩展数据类型,例如dataframe。xarray以紧缩格式存储在连续的内存空间中,主要是为了速度和节省内存开销。
安装
(已集成到mytsl
发行版中)
动态库文件:Windows: xt_plugin.dll, Linux: libxt_plugin.so。
把相关的动态库文件拷贝到执行服务器或者TSL目录的plugin目录。
(如果需要下载兼容正式版的Windows版本的动态库文件请访问这里)。
使用指南
提供的TSL函数:
xarray
xarray(typedef, init)
: 创建xarray。
-
参数列表
参数 描述 typedef 类型定义,魔法参数类型。 init 初始化,可以是魔法参数类型或者TSL的array类型。 -
返回值
xarray对象
-
支持的类型定义
类型 描述 bool 布尔值 int 有符号32位整数 int64 有符号64位整数 double 64位浮点数 例子:
xarray对象的相关方法
dump()
dump([indent])
: 返回json格式的内容。
-
参数列表
参数 描述 indent 缩进空格数,整数类型,可选参数,默认不缩进。 -
返回值
字符串类型。
例如:
z := xarray(
@double(),
@((
(1.0, 2.0, 3.0),
(2.0, 3.0, 4.0),
(3.0, 4.0, 5.0)
),
(
(4.0, 5.0, 6.0),
(5.0, 6.0, 7.0),
(6.0, 7.0, 8.0)
)
));
vprintln(z.dump());
// 打印
[[[1.0,2.0,3.0],[2.0,3.0,4.0],[3.0,4.0,5.0]],[[4.0,5.0,6.0],[5.0,6.0,7.0],[6.0,7.0,8.0]]]
shape()
shape()
: 返回维度信息。
-
参数列表
无
-
返回值
一维数组。
例如:
z := xarray(
@double(),
@((
(1.0, 2.0, 3.0),
(2.0, 3.0, 4.0),
(3.0, 4.0, 5.0)
),
(
(4.0, 5.0, 6.0),
(5.0, 6.0, 7.0),
(6.0, 7.0, 8.0)
)
));
vprintln(z.shape());
// 打印
array(2L,3L,3L)
reshape
reshape(...args)
: 改变维度。
-
参数列表
参数 描述 ...args 维度信息,整数类型。 注意:如果数组长度不够会报错。
-
返回值
无。
例如:
z := xarray(
@double(),
@((
(1.0, 2.0, 3.0),
(2.0, 3.0, 4.0),
(3.0, 4.0, 5.0)
),
(
(4.0, 5.0, 6.0),
(5.0, 6.0, 7.0),
(6.0, 7.0, 8.0)
)
));
z.reshape(3,2,3);
vprintln(z.shape());
// 打印
array(3L,2L,3L)
获取和设置数组元素
y := xarray(
@double(),
array(
(1.0, 2.0, 3.0),
(2.0, 3.0, 4.0),
(3.0, 4.0, 5.0)
));
y[0,0] := 100;
println("y[0,0]={}", y[0,0]);
运算
可以进行基本的运算。
xrand
xrand(d0, d1, ..., dn)
: 创建随机数组。
-
参数列表
参数 描述 d0 ... dn 维度,整数类型 -
返回值
xarray对象
xrandn
xrandn(d0, d1, ..., dn)
: 从“标准正态”分布中创建数组。
-
参数列表
参数 描述 d0 ... dn 维度,整数类型 -
返回值
xarray对象
xrandint (TODO)
xarange
xarange([start,] stop, [step])
: 根据start与stop指定的范围以及step设定的步长,生成一个数组。
-
参数列表
参数 描述 start 计数从start开始。可选参数,默认是从0开始。 stop 计数结束。 step 步长。 -
返回值
xarray对象
例如:
xeye
xeye(N, M)
: 。
-
参数列表
参数 描述 N 维度,整数类型。 M 可选参数,默认等于N,整数类型。 -
返回值
xarray对象
例如:
xones
xones(d0,...,dn)
: 。
-
参数列表
参数 描述 d0 ... dn 维度,整数类型 -
返回值
xarray对象
例如:
xzeros
xzeros(d0,...,dn)
: 。
-
参数列表
参数 描述 d0 ... dn 维度,整数类型 -
返回值
xarray对象
例如:
xempty
xempty(d0,...,dn)
: 。
-
参数列表
参数 描述 d0 ... dn 维度,整数类型 -
返回值
xarray对象
例如:
xlinspace
xlinspace(start, stop, num=50)
: 在指定的间隔内返回均匀间隔的数组。
-
参数列表
参数 描述 start 开始值 stop 结束值 num 个数,可选参数,默认50 -
返回值
xarray对象
例如:
xlogspace
xlogspace(start, stop, num=50)
: 在指定的间隔内返回对数均匀分布的数组 。
-
参数列表
参数 描述 start 开始值 stop 结束值 num 个数,可选参数,默认50 -
返回值
xarray对象
例如:
xsum
xsum(a)
: 计算数组值的和。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xamin
xamin(a)
: 计算数组值中的最小值。
-
参数列表
参数 描述 a xarray -
返回值
最小值。
例如:
xamax
xamax(a)
: 计算数组值中的最大值。
-
参数列表
参数 描述 a xarray -
返回值
最大值。
例如:
xargmin
xargmin(a)
: 返回数组值中的最小值的索引。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xargmax
xargmax(a)
: 返回数组值中的最大值的索引。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xsort
xsort(a)
: 返回排序的数组。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xargsort
xargsort(a)
: 返回排序的数组。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xunique
xunique(a)
: 返回数组中唯一值。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xpartition
xpartition(a, kth)
: 返回数组的分区副本。
-
参数列表
参数 描述 a xarray kth 第k个, 分区索引。 -
返回值
xarray对象
例如:
xsetdiff1d (TODO)
xdiff
xdiff(a[, n, axis])
: 计算数组的离散差。
-
参数列表
参数 描述 a xarray n axis -
返回值
xarray对象
例如:
xargpartition
xargpartition(a, kth)
: 返回数组的分区副本。
-
参数列表
参数 描述 a xarray kth 第k个, 分区索引。 -
返回值
xarray对象
例如:
xmedian
xmedian(a, axis)
: 计算沿指定轴的中位数。
-
参数列表
参数 描述 a xarray axis -
返回值
xarray对象
例如:
xchoice
xchoice(a, axis)
: 。
-
参数列表
参数 描述 a xarray axis -
返回值
xarray对象
例如:
xshuffle
xshuffle(a)
: 改组数组 。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xpermutation
xpermutation(a)
: 返回随机排列的数组 。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xprod
xprod(a)
: 返回给定轴上数组元素的乘积 。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xmean
xmean(a)
: 计算沿指定轴的算术平均值 。
-
参数列表
参数 描述 a xarray -
返回值
值或者xarray对象
例如:
xstddev
xstddev(a)
: 计算沿指定轴的标准偏差 。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xvariance
xvariance(a)
: 计算沿指定轴的方差。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xtrapz
xtrapz(a)
: 使用复合梯形规则沿给定轴积分。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xcount_nonzero
xcount_nonzero(a)
: 计算数组中非零值的数量。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xabs
xabs(a)
: 按元素计算绝对值 。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xsign
xsign(a)
: 。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xremainder
xremainder(a, b)
: 返回除法的元素余数。
-
参数列表
参数 描述 a xarray b xarray -
返回值
xarray对象
例如:
xminimum
xminimum(a, b)
: 。
-
参数列表
参数 描述 a xarray b xarray -
返回值
xarray对象
例如:
xmaximum
xmaximum(a, b)
: 。
-
参数列表
参数 描述 a xarray b xarrat -
返回值
xarray对象
例如:
xclip
xclip(a, min, max)
: 剪辑数组中的值 。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xfma (TODO)
xinterp (TODO)
xrad2deg
xrad2deg(a)
: 将角度从弧度转换为度数。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xdegrees
xdegrees(a)
: 将角度从弧度转换为度。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xdeg2rad
xdeg2rad(a)
: 将角度从度数转换为弧度。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xradians
xradians(a)
: 将角度从度转换为弧度。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xexp
xexp(a)
: 计算所有元素的指数。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xexpm1
xexpm1(a)
: 计算所有元素的指数exp(x) - 1 。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xlog
xlog(a)
: 自然对数 。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xlog1p
xlog1p(a)
: 计算log(1 + x) 。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xpow (TODO)
xsqrt
xsqrt(a)
: 按元素返回数组的非负平方根 。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xsquare
xsquare(a)
: 计算平方 。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xcube
xcube(a)
: 计算平方。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xcbrt
xcbrt(a)
: 按元素返回数组的立方根 。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xsin
xsin(a)
: 计算sin() 。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xcos
xcos(a)
: cos() 。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xtan
xtan(a)
: tan()。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xsinh
xsinh(a)
: sinh()。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xcosh
xcosh(a)
: cosh() 。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xtanh
xtanh(a)
: tanh() 。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xerf
xerf(a)
: erf()。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xtgamma
xtgamma(a)
: tgamma() 。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xlgamma
xlgamma(a)
: lgamma()。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xisnan
xisnan(a)
: isnan() 。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xisinf
xisinf(a)
: isinf() 。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xisfinite
xisfinite(a)
: isfinite() 。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xsearchsorted (TODO)
xhistogram
xhistogram(a, bins)
: 计算数据集的直方图。
-
参数列表
参数 描述 a xarray bins 可选参数,默认是10 -
返回值
xarray对象
例如:
xhistogram_bin_edges
xhistogram_bin_edges(a, bin_edges)
: 计算数据集的直方图。
-
参数列表
参数 描述 a xarray bin_edges xarray -
返回值
xarray对象
例如:
xbincount
xbincount(a)
: 计算非负整数数组中每个值的出现次数。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xdigitize
xdigitize(a, bin_edges)
: 返回输入数组中每个值所属的 bin 的索引。
-
参数列表
参数 描述 a xarray bin_edges xarray -
返回值
xarray对象
例如:
xdot
xdot(a, b)
: 两个数组的点积。
-
参数列表
参数 描述 a xarray b xarray -
返回值
xarray对象
例如:
xvdot
xvdot(a, b)
: 返回两个向量的点积。
-
参数列表
参数 描述 a xarray b xarray -
返回值
xarray对象
例如:
xouter
xouter(a, b)
: 计算两个向量的外积。
-
参数列表
参数 描述 a xarray b xarray -
返回值
xarray对象
例如:
xmatrix_power
xmatrix_power(a, b)
: 将方阵提高到(整数)幂n。
-
参数列表
参数 描述 a xarray b xarray -
返回值
xarray对象
例如:
xkron
xkron(a, b)
: 两个数组的Kron Ecker 乘积。
-
参数列表
参数 描述 a xarray b xarray -
返回值
xarray对象
例如:
xcholesky
xcholesky(a)
: Cholesky分解。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xqr
xqr(a)
: 计算矩阵的qr分解。
-
参数列表
参数 描述 a xarray -
返回值
array对象
下标 值 0 q 1 r
例如:
xsvd
xsvd(a)
: 奇异值分解。
-
参数列表
参数 描述 a xarray -
返回值
array对象
下标 值 0 s 1 v 2 d
例如:
xeig
xeig(a)
: 计算方形数组的特征值和右特征向量。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xeigvals
xeigvals(a)
: 计算一般矩阵的特征值。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xeigh
xeigh(a)
: 返回复数 Hermitian(共轭对称)或实对称矩阵的特征值和特征向量。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xeigvalsh
xeigvalsh(a, b)
: 计算复数 Hermitian 或实对称矩阵的特征值。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xnorm
xnorm(a)
: 矩阵或向量范数。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xcond
xcond(a, b)
: 计算矩阵的条件数。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xdet
xdet(a)
: 计算一个数组的行列式。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xmatrix_rank
xmatrix_rank(a)
: 使用 SVD 方法返回数组的矩阵秩。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xslogdet
xslogdet(a)
: 计算数组行列式的符号和(自然)对数。
-
参数列表
参数 描述 a xarray -
返回值
array对象
下标 值 0 sign 1 logdet
例如:
xtrace
xtrace(a)
: 返回沿数组对角线的总和。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xinv
xinv(a)
: 计算矩阵的(乘法)逆。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xpinv
xpinv(a)
: 计算矩阵的 (Moore-Penrose) 伪逆。
-
参数列表
参数 描述 a xarray -
返回值
xarray对象
例如:
xsolve
xsolve(a, b)
: 求解线性矩阵方程或线性标量方程组。
-
参数列表
参数 描述 a xarray b xarray -
返回值
xarray对象
例如:
xlstsq
xlstsq(a, b)
: 返回线性矩阵方程的最小二乘解。
-
参数列表
参数 描述 a xarray b xarray -
返回值
xarray对象
例如:
性能比较
部分函数已经做了SIMD指令优化,速度是非常快的。例如xsum,对100万个元素的数组做1万次sum计算仅需要1.8秒,相当的快。
x := xrand(100*10000);
mtic;
for i := 0 to 9999 do
a := xsum(x);
vprintln(mtoc);
打印
1.8115709
x := xrand(100*1000, 10);
mtic;
for i := 0 to 9999 do
a := xsum(x);
vprintln(mtoc);
打印
1.7829401
可以看出多维数组也是一样的。
x := xrand(100*1000, 20);
mtic;
for i := 0 to 9999 do
a := xsum(x);
vprintln(mtoc);
打印
3.920144
// AVX2指令集优化,运行的CPU是i9-12900K
范例
TBD
附录
更新历史
- 2022-9-1 初始发布。