fixedLengthArrayVector

New in version 2.00.4.

语法

fixedLengthArrayVector(args…)

参数

args 可以是一个或多个向量(不包括array vector)/元组/矩阵或表。args 的每个元素必须具有相同的数据类型,且必须是 数组向量(array vector) 支持的类型。

详情

将向量、矩阵或表拼接为一个数组向量。其拼接方式如下图所示(对应例2):

注意:向量的长度(元组中每个向量的长度)、矩阵、表的行数必须相同。

../../../_images/fixedLengthArrayVector.png

首发版本

2.00.4

例子

例1. 将多列合并成一列

下例简单示意了将 2 档 bid 报价存储为数组向量的例子。

$ login("admin","123456")
$ syms="A"+string(1..30)
$ datetimes=2019.01.01T00:00:00..2019.01.31T23:59:59
$ n=200
$ if(existsDatabase("dfs://stock")) {
$       dropDatabase("dfs://stock")
$ }
$ db=database("dfs://stock", RANGE, cutPoints(syms,3), engine="TSDB");
$ t=table(take(datetimes,n) as trade_time, take(syms,n) as sym,take(500+rand(10.0,n), n) as bid1, take(500+rand(20.0,n),n) as bid2)
$ t1=select trade_time, sym, fixedLengthArrayVector(bid1,bid2) as bid from t

$ quotes=db.createPartitionedTable(t1,`quotes,`sym, sortColumns=`sym`trade_time).append!(t1)
$ select * from quotes

trade_time

sym

bid

2019.01.01T00:00:00

A1

[503.111142,507.55833]

2019.01.01T00:00:30

A1

[502.991382,501.734092]

2019.01.01T00:01:00

A1

[500.790709,509.200963]

2019.01.01T00:01:30

A1

[501.127932,507.972508]

2019.01.01T00:02:00

A1

[500.678614,514.947117]

通过索引可以取出单档 bid 的数据,单独进行计算。对 bid 列应用函数计算,相当于将所有档的 bid 数据一起计算。

$ select avg(bid[0]) as avg_bid1, avg(bid[1]) as avg_bid2, avg(bid) as avg_bid from quotes

avg_bid1

avg_bid2

avg_bid

505.0263

509.2912

507.16

现实场景下,可能需要将 50 档甚至更多的报价存储为数组向量,编写脚本十分不便。由于报价字段名通常以表示报价类型的字符串加编号的形式存储,可以通过以下方式编写脚本:

// 随机生成 50 档报价
$ n = 200
$ t=table(take(datetimes,n) as trade_time, take(syms,n) as sym)
$ for(i  in 1:51){
        t["bid"+string(i)] = take(500+rand(10.0,n), n)
$ }

// 将 50 档报价存储为数组向量
$ t["bid"]=fixedLengthArrayVector(t["bid"+string(1..50)])
$ t1=select trade_time, sym, bid from t

结合 unifiedCall 函数,可以进一步提升计算性能:

$ t["bid"]=unifiedCall(fixedLengthArrayVector, t["bid"+string(1..50)])
$ t1=select trade_time, sym, bid from t

例2. 图例代码

$ vec = 1 5 3
$ tp = [3 4 5, 4 5 6]
$ m =  matrix(5 0 7, 7 6 9, 1 9 0)
$ tb = table(6 9 4 as v1, 1 4 3 as v2)
$ f = fixedLengthArrayVector(vec, tp, m, tb)
$ f;
[[1,3,4,5,7,1,6,1],[5,4,5,0,6,9,9,4],[3,5,6,7,9,0,4,3]]

$ typestr(f);
FAST INT[] VECTOR