跳转至

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位浮点数

    例子:

    a := xarray(@int(3,4,5)); // 类型中可以有维度数据
    x := xarray(@int(), array(1,2,3,4));
    y := xarray(@int(), @(1,2,3,4));
    z := xarray(
      @double(),
      @(
       (1.0, 2.0, 3.0),
       (2.0, 3.0, 4.0),
       (3.0, 4.0, 5.0)
      ));  
    

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]); 

运算

可以进行基本的运算。

x := xarray(@int(), array(1,2,3,4));
x += 2;
y := x * 2;

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对象

例如:

x := xarange(10);

xeye

xeye(N, M): 。

  • 参数列表

    参数 描述
    N 维度,整数类型。
    M 可选参数,默认等于N,整数类型。
  • 返回值

xarray对象

例如:

x := xeye(10);

xones

xones(d0,...,dn): 。

  • 参数列表

    参数 描述
    d0 ... dn 维度,整数类型
  • 返回值

xarray对象

例如:

x := xones(10);

xzeros

xzeros(d0,...,dn): 。

  • 参数列表

    参数 描述
    d0 ... dn 维度,整数类型
  • 返回值

xarray对象

例如:

x := xzeros(10);

xempty

xempty(d0,...,dn): 。

  • 参数列表

    参数 描述
    d0 ... dn 维度,整数类型
  • 返回值

xarray对象

例如:

x := xempty(10);

xlinspace

xlinspace(start, stop, num=50): 在指定的间隔内返回均匀间隔的数组。

  • 参数列表

    参数 描述
    start 开始值
    stop 结束值
    num 个数,可选参数,默认50
  • 返回值

xarray对象

例如:

x := xlinspace(10, 100);

xlogspace

xlogspace(start, stop, num=50): 在指定的间隔内返回对数均匀分布的数组 。

  • 参数列表

    参数 描述
    start 开始值
    stop 结束值
    num 个数,可选参数,默认50
  • 返回值

xarray对象

例如:

x := xlogspace(10, 100);

xsum

xsum(a): 计算数组值的和。

  • 参数列表

    参数 描述
    a xarray
  • 返回值

xarray对象

例如:

x := xsum(xrand(10, 100));

xamin

xamin(a): 计算数组值中的最小值。

  • 参数列表

    参数 描述
    a xarray
  • 返回值

最小值。

例如:

x := xamin(xrand(10, 100));

xamax

xamax(a): 计算数组值中的最大值。

  • 参数列表

    参数 描述
    a xarray
  • 返回值

最大值。

例如:

x := xamax(xrand(10, 100));

xargmin

xargmin(a): 返回数组值中的最小值的索引。

  • 参数列表

    参数 描述
    a xarray
  • 返回值

xarray对象

例如:

x := xargmin(xrand(10, 100));

xargmax

xargmax(a): 返回数组值中的最大值的索引。

  • 参数列表

    参数 描述
    a xarray
  • 返回值

xarray对象

例如:

x := xargmax(xrand(10, 100));

xsort

xsort(a): 返回排序的数组。

  • 参数列表

    参数 描述
    a xarray
  • 返回值

xarray对象

例如:

x := xsort(xrand(10, 100));

xargsort

xargsort(a): 返回排序的数组。

  • 参数列表

    参数 描述
    a xarray
  • 返回值

xarray对象

例如:

x := xargsort(xrand(10, 100));

xunique

xunique(a): 返回数组中唯一值。

  • 参数列表

    参数 描述
    a xarray
  • 返回值

xarray对象

例如:

x := xunique(xarray(@int(), array(1, 1, 2, 2, 3, 3)));
返回
[1,2,3]

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 初始发布。