Files
playbook/skills/tsl-api-reference/references/codegen/builtin/base/array.md
T
csh c0bf0358e0 📝 docs(tsl): sync api skill with corrected codegen
Mirror docs/tsl/codegen into the bundled tsl-api-reference skill and rebuild the function index.

Remove invalid duplicate API entries for cb_delistedbydate, createhttpsession, exportJsonString, and Anova_Bartlett so exact lookup returns the canonical entries.
2026-07-07 16:47:03 +08:00

72 KiB
Raw Blame History

Builtin - 基础 / 数组

getStrindexnum(value)

返回字符串下标的个数

参数 类型 说明
value array 数组类型

返回:integer

示例

arr := array("a1": 1, "a2": 2, 1: 3);
return getStrindexnum(arr);
// 输出:2

getstrindexs(value)

返回数组类型,存储参数Value的所有的字符串下标

参数 类型 说明
value array 数组类型

返回:array of string

示例

arr := array("a1": 1, "a2": 2, "a3": 3);
return getstrindexs(arr);
// 输出:array(“a1”,”a2”,”a3”)。

getintindexs(value)

返回数组类型,存储数组Value的所有的数字下标

参数 类型 说明
value array 数组类型

返回:array of integer

示例

arr := array(1: "p1", 2: "p2", 3: "p3", "a4": "p4");
return getintindexs(arr);
// 输出:array(1,2,3)

getAllIndexs(value)

返回数组类型,存储数组Value的所有下标

参数 类型 说明
value array 数组类型

返回:array

示例

arr := array("p1": 1, "p2": 2, "p3": 3);
return getAllIndexs(arr); // 输出:array(“p1”,”p2”,”p3”)

length(value)

返回字符串、二进制流或者数组或者Matrix的行长度。

参数 类型 说明
value string|binary|array|matrix 字符串、二进制流或数组或者Matrix类型

返回:integer

示例

arr := array(("p1": 1, "p2": 2, "p3": 3), ("p1": 4, "p2": 5, "p3": 6));
return length(arr); // 输出:2

sortTableByField(value, field, sortdir)

对一个表类型的数组Value用字段名Field排序,排序方向由sortdir决定,如果省略sortdir参数或者设置sortdir为1,正序排序,否则逆序排序。

参数 类型 说明
value array 二维数组;
field string 字符串,数组的列下标;
sortdir bool 布尔型,排序方向,1表示正序,0表示逆序。

返回:integer

示例

arr := array(
    ("p1": 1, "p2": 2, "p3": 3),
    ("p1": 4, "p2": 5, "p3": 6),
    ("p1": 66, "p2": 200, "p3": 36),
    ("p1": 30, "p2": 500, "p3": 40)
);
sortTableByField(arr, "p1", 1); // sortdir=1按"p1"正序,sortdir=0反序
return arr;
// 输出:
// array(
// ("p1":1, "p2":2, "p3":3),
// ("p1":4, "p2":5, "p3":6),
// ("p1":30, "p2":500, "p3":40),
// ("p1":66, "p2":200, "p3":36))

filterIn(r, v, field, b_return_sub_result=true)

返回指定列的值在过滤集内的子结果集或者下标列表。

参数 类型 说明
r array 待过滤的数据表或数组。
v array 过滤集。
field string 指定列名;为 nil 时按整行或一维数组元素匹配。
b_return_sub_result bool 可选参数,默认 true。为 true 时返回子结果集,为 false 时返回行下标列表。

返回:array,tablearray

示例

范例 01:过滤表中指定列的值。

a := array(
    ("a": 0, "b": 0, "c": 0),
    ("a": 1, "b": 0, "c": 2),
    ("a": 2, "b": 1, "c": 4),
    ("a": 3, "b": 1, "c": 6),
    ("a": 4, "b": 2, "c": 8),
    ("a": 5, "b": 2, "c": 10),
    ("a": 6, "b": 3, "c": 12)
);
return filterIn(a, array(1, 2, 5), "a");
// 输出:array(
// ("a":1, "b":0, "c":2),
// ("a":2, "b":1, "c":4),
// ("a":5, "b":2, "c":10)
// )

范例 02:按整行数据筛选子集。

a := array();
for i := 0 to 15 do
begin
    a[i]["a"] := i;
    a[i]["b"] := i div 2;
    a[i]["c"] := i * 2;
end;
return filterIn(a, array(("a": 2, "b": 1, "c": 4), ("a": 3, "b": 1, "c": 4)), nil);
// 输出:array(
// ("a":2, "b":1, "c":4)
// )

范例 03:按多列组合筛选子集。

a := array();
for i := 0 to 15 do
begin
    a[i]["a"] := i;
    a[i]["b"] := i div 2;
    a[i]["c"] := i * 2;
end;
return filterIn(a, array(("a": 2, "b": 1), ("a": 3, "b": 1)), array("a", "b"));
// 输出:array(
// ("a":2, "b":1, "c":4),
// ("a":3, "b":1, "c":6)
// )

范例 04:返回符合指定列数据的行下标。

a := array();
for i := 0 to 15 do
begin
    a[i]["a"] := i;
    a[i]["b"] := i div 2;
    a[i]["c"] := i * 2;
end;
return filterIn(a, array(("a": 2, "b": 1), ("a": 3, "b": 1)), array("a", "b"), false);
// 输出:array(2, 3)

范例 05:过滤一维数组。

return filterIn(array(1, -5, 10, 2, 10, 14, -5), array(2, 3, 10), nil);
// 输出:array(10, 2, 10)

filterNotIn(r, v, field, b_return_sub_result=true)

返回指定列的值不在过滤集内的子结果集或者下标列表。

参数 类型 说明
r array 待过滤的数据表或数组。
v array 过滤集。
field string 指定列名;为 nil 时按整行或一维数组元素匹配。
b_return_sub_result bool 可选参数,默认 true。为 true 时返回子结果集,为 false 时返回行下标列表。

返回:array,tablearray

示例

范例 01:按指定列过滤数据表,并同时查看子结果集和行下标。

a := array();
for i := 0 to 5 do
begin
    a[i]["a"] := i;
    a[i]["b"] := i div 2;
    a[i]["c"] := i * 2;
end;
b := array(1, 3, 5);
c1 := filterNotIn(a, b, "a"); // 过滤结果
c2 := filterNotIn(a, b, "a", false); // 过滤仅返回下标
return array(c1, c2);
// 输出:
// array(
// (
// ("a":0, "b":0, "c":0),
// ("a":2, "b":1, "c":4),
// ("a":4, "b":2, "c":8)),
// (0, 2, 4))

范例 02:按整行数据过滤二维数组,保留重复行。

t := array(
    ("a": 0, "b": 0, "c": 0),
    ("a": 1, "b": 0, "c": 2),
    ("a": 2, "b": 1, "c": 4),
    ("a": 2, "b": 1, "c": 4),
    ("a": 4, "b": 2, "c": 8),
    ("a": 4, "b": 2, "c": 8),
    ("a": 6, "b": 3, "c": 12)
);
return filterNotIn(t, array(("a": 2, "b": 1, "c": 4)), nil);
// 输出:
// array(
// ("a":0, "b":0, "c":0),
// ("a":1, "b":0, "c":2),
// ("a":4, "b":2, "c":8),
// ("a":4, "b":2, "c":8),
// ("a":6, "b":3, "c":12))

范例 03:过滤一维数组。

return filterNotIn(array(1, -5, 10, 2, 10, 14, -5), array(2, 3, 10), nil);
// 输出:array(1, -5, 14, -5)

sortArray(value, sortdir)

对一个一维数组进行排序,方向为sortdir;如果省略sortdir参数,默认为1,正序排序;设置为0时,逆序排序。

参数 类型 说明
value array 一维数组
sortdir bool 布尔型,排序方向

返回:integer

示例

arr := array(1, 6, 3);
sortArray(arr);
return  arr;
// array(1,3,6)

reIndex(data, index_info1, index_info2, index_info_n)

修改数组下标

参数 类型 说明
data array 需要重构的数组
index_info1 nil|array 第一维的重构信息,如果为NIL则表示该维度不重构,数组以需要重构的下标为下标新下标为值的模式。
index_info2 nil|array 第二维的重构信息,可省略
index_info_n nil|array 第N维的重构信息,可省略

返回:any

示例

// 修改数字列名数组为字符串列名数组,即将0,1,2(自增数字)列名重构为"a","b","c"列名的数组
a := rand(10, 3);
s := array("a", "b", "c");
reIndex(a, nil, s);
return a;
// 修改数字行标数组为字符串行标数组,即将0,1,2(自增数字)行标重构为"a","b","c"行标的数组
a := rand(3, 3);
s := array("a", "b", "c");
reIndex(a, s);
return a;
// 通过设置行标为nil进行删除该行记录
a := array("A": 0, "B": 1, "D": 2, "E": 3);
reIndex(a, array("A": "A1", "D": nil));
return a;
// 返回:array("A1":0,"B":1,"E":3);
// 如果我们要对多维数组进行处理
a := rand(10, array("A", "B", "D", "E"); // 初始化一个四列的二维矩阵
reIndex(a, nil, array("A": "A1", "D": nil));
return a;
// 说明,第2个参数为nil表示对第一维的下标不进行变动,因此我们修改列"A"为"A1",并删除"D"列。
// 利用Reindex做列的交换
a := array(1, 2, 3, 4, 5);
reIndex(a, array(0: 4, 4: 0));
return a;
// 结果为array(5,2,3,4,1);

fieldNamesOfStrSubscript(t)

字符串下标数组的字段名称。

参数 类型 说明
t array 整数

返回:any

示例

s := `array('a': (1, 2, 3, 4, 5), 'b': (2, 3, 4, 5, 6), 'c': (3, 4, 5, 6, 7), 'd': (4, 5, 6, 7, 8));
return fieldNamesOfStrSubscript(s);
// 返回:

fieldCountOfStrSubscript(t)

字符串下标数组的字段个数。

参数 类型 说明
t array 数据表类型

返回:integer

示例

s := `array('a': (1, 2, 3, 4, 5), 'b': (2, 3, 4, 5, 6), 'c': (3, 4, 5, 6, 7), 'd': (4, 5, 6, 7, 8));
return fieldCountOfStrSubscript(s);
// 返回:4

argmax(x)

1、返回一维数组中最大值所在下标

参数 类型 说明
x array,tablearray 一维数字数组

返回:integer

示例

x := array(9, 8, 10);
return argmax(x); // 2

argmin(x)

1、返回一维数组中最小值所在下标

参数 类型 说明
x array,tablearray 一维数字数组

返回:integer

示例

x := array(3, 1, 9, 2);
return argmin(x); // 1

sortTableByFieldExt(t, sort_field)

将数组t依据字段SortField排序。把大于0的按照从小到大排序,把小于0的按照绝对值从小到大排序,然后,把两个结果合并。

参数 类型 说明
t array 数据表类型,数组
sort_field string 字符串,排序字段

返回:any

示例

s := `array('a': (1, 2, 3, 4, 5), 'b': (-2, -3, -4, 5, 6), 'c': (3, 4, 5, 6, 7), 'd': (4, 5, 6, 7, 8));
return sortTableByFieldExt(s, 'b');
// 返回:

rankValue(t, fields)

按照指定字段求Rank,返回的数据,保存在传递过来的数据t中。返回按Fields列排序的结果,

参数 类型 说明
t array 数据表类型,数据表
fields string 字符串,排序的列

返回:any

示例

// 取上证50的成分股,获得涨幅之后,对涨幅进行排名
stock_arr := getBkByDate('SH000016', 20190201T);
s := select ['StockID'] as '代码',
["StockName"] as "名称",
['price'] as '收盘',
stockZf(['date'], ['date']) as '涨幅(%)'
from markettable datekey 20190201T to 20190201T of stockArr end;
rankValue(s, '涨幅(%)');
return s;
// 输出:
// Execute script error at Line:2
// function:__main__:line 2:instruction:usercall: function:getBkByDate compile error or not found
// function:__main__:line 2:instruction:usercall: function execute error

argsort(value, sortdir)

返回可以用于排序的一维数组下标

参数 类型 说明
value array 一维数字数组,数组
sortdir integer 整数,排序方向(1:正序【默认】;0:逆序)

返回:array

示例

value := array(4, 8, 2, 3, 9);
return argsort(value); // 返回:array(2,3,0,1,4)

rankIt(t, f_n, sort_order)

按指定字段的值排名;SortOrder0 降序排名;SortOrder1升序排名

参数 类型 说明
t array 数据表
f_n string 字段名
sort_order integer 排名方向,0 降序排名, 1升序排名

返回:array

示例

t2 := array(('a': 2, 'c': 13), ('a': 3, 'c': 33));
rankIt(t2, 'c', 1);
return t2;
// 输出:
// Execute script error at Line:2
// function:__main__:line 2:instruction:usercall: function:rankIt compile error or not found
// function:__main__:line 2:instruction:usercall: function execute error

rankIt2(t, f_n, of_n, sort_order)

按指定字段的值排名,SortOrder:0 降序排名;SortOrder:1 升序排名,排名列的字段为:OfN

参数 类型 说明
t array 数据表
f_n string 指定字段,字符串
of_n string 排名列字段名,字符串
sort_order integer 排名方向:0 降序排名,1 升序排名

返回:array

示例

t2 := array(('a': 2, 'c': 13), ('a': 3, 'c': 33));
rankIt2(t2, 'c', '名次', 1);
return t2;
// 输出:
// 示例包含说明文字,未作为可执行片段运行。

rpsIt(t, f_n, sort_order)

按指定字段的值排名,获得其排名的百分位,排序百分位放在列 FN+"_RPS"中;

参数 类型 说明
t array 数组,数据表
f_n string 字符串/数字,字段名
sort_order integer 排名方向,0 降序排名, 1升序排名

返回:array

示例

// 获得沪深300的成分股,并计算EndT的涨幅,对涨幅排序后返回其排序百分比。
endt := intToDate(20140401);
setSysParam(PN_Date(), end_t);
stock_arr := getBkByDate('SH000300', end_t);
r := array();
n := 0;
for n_i := 0 to length(stock_arr)-1 do
begin
stock_id := stock_arr[n_i];
setSysParam(pn_stock(), stock_id);
if not isTradeDay(end_t) then continue;
r[n]['StockID'] := stock_id;
r[n]['StockName'] := stockName(stock_id);
r[n]['StockZF'] := stockZf3();
n++;
end;
return rpsIt(r, 'StockZF', 1);
// 部分结果截图:

deleteNilValueByField(t, fields)

删除指定字段fields数据为NIL的记录。

参数 类型 说明
t array 数据表类型,数据
fields string 字符串,字段名称,多个字段用分号(;)连接,例:"Field1;Field2

返回:array

示例

tdata := array(array('time': 1, 'price': 7.78), array('time': 2));
deleteNilValueByField(tdata, 'price');
return tdata;
// 返回:

inserttablebyrno(t, index, rdata)

向表格指定位置插入行,天软表格行下标从0开始

参数 类型 说明
t array Array,数组,支持一维,二维数组,只支持下标为自增长的序列数组
index integer Integer,插入行的起始下标,下标位置从0开始
rdata any Any,插入的数据,支持一个值、一维表及二维表

返回:array

示例

范例1

// 向一维数组指定位置插入一个字符串’aaa
t := 43456->43460;
index := 2;
r_data := 'aaa';
return inserttablebyrno(t, index, r_data);
// 结果:array(43456,43457,"aaa",43458,43459,43460)

范例2

// 向一维数组第3行插入多行的数据
t := 44000->44004;
index := 3;
r_data := array('a', 'b', 'c');
return inserttablebyrno(t, index, r_data);
// 结果:
array(44000, 44001, 44002, "a", "b", "c", 44003, 44004)

范例3

// 向二维数组第3行插入多行的数据
t := array(('a': 10, 'b': 'i', 'c': dateToStr(20200319T)),
('a': 50, 'b': 'i', 'c': dateToStr(20200318T)),
('a': 60, 'b': 'i', 'c': dateToStr(20200317T)),
('a': 40, 'b': 'o', 'c': dateToStr(20200316T)),
('a': 20, 'b': 'o', 'c': dateToStr(20200313T)));
index := 3;
r_data := array(('c': 0, 'b': 44000, 'a': '2020-03-20'));
return inserttablebyrno(t, index, r_data);
// 输出:
// Execute script error at Line:9
// function:__main__:line 9:instruction:usercall: function:inserttablebyrno compile error or not found
// function:__main__:line 9:instruction:usercall: function execute error

范例4

// 向二维数组第1行插入多行的数据
t := array(('a': 10, 'b': 'i', 'c': dateToStr(20200319T)),
('a': 50, 'b': 'i', 'c': dateToStr(20200318T)),
('a': 60, 'b': 'i', 'c': dateToStr(20200317T)),
('a': 40, 'b': 'o', 'c': dateToStr(20200316T)),
('a': 20, 'b': 'o', 'c': dateToStr(20200313T)));
index := 1;
r_data := array(('c': '2020', 'b': 'AAA', 'a': 44456),
('c': '2020', 'b': 'BBB', 'a': 44566));
return inserttablebyrno(t, index, r_data);
// 输出:
// Execute script error at Line:10
// function:__main__:line 10:instruction:usercall: function:inserttablebyrno compile error or not found
// function:__main__:line 10:instruction:usercall: function execute error

arrayextend(a, ind, v)

数组-指定位置插入子集

参数 类型 说明
a array of number Array of number,一维数字数组
ind integer Integer,插入的起始位置
v array of number Array of number,插入的子数组

返回:array

示例

a := letters(1->6);
return arrayextend(a, 2, array('d', 'e'));
// 返回:array("A", "B", "d", "e", "C", "D", "E", "F")

arrayinsert(a, ind, v)

数组-指定位置插入值

参数 类型 说明
a array of number Array of number,一维数字数组
ind integer Integer,插入位置
v any Any,元素值

返回:array

示例

a := letters(1->6);
return arrayinsert(a, 2, 3);
// 返回:array("A", "B", 3, "C", "D", "E", "F")

frameinsert(data, loc, fname, v)

数据表-指定位置插入列

参数 类型 说明
data table Table,二维数据表,源数据
loc integer Integer,插入位置
fname string String,插入索引命名
v integer Integer,插入值

返回:array

示例

data := load_dataset_iris();
return frameinsert(data, 1, '新列', 0);

searchsorted(v, x)

有序列表插入指定值的位置,原数组必须为有序表且元素应可比较。

参数 类型 说明
v array 一维数组 有序数组
x string | real 插入的值

返回:integer

示例

// 数字插入
v := array(1, 2, 3, 4, 5, 6);
return searchsorted(v, 3.5); // 返回:3
// 字符串插入
v := array("SH600001", "SH600004", "SH600050", "SH600305");
return searchsorted(v, "SH600049"); // 返回:2

argconfirst(a, v, _type)

第一次满足条件的位置, 原数组必须为有序表且元素应可比较。

参数 类型 说明
a array 有序数组
v string|real|array 对比值
_type integer 对比条件

返回:integer

示例

// 实数对比
a := 0->9;
return argconfirst(a, 3.5, 1); // 返回:4
// 数组对比
a := array(("a", "A"), ("b", "B"), ("c", "C"), ("d", "D"));
v := array("b", "B");
return argconfirst(a, v, 6); // 返回:1

stockAmount(t, date, yes_value)

从数据表t中获取符合ChangeField大于或等于Date的数据。

参数 类型 说明
t array 数据表类型,需要比较获取的数据表
date integer 实数,或者日期
yes_value integer 布尔值,决定返回Date当天的数据还是之前的数据;

返回:any

示例

// 平安银行2011年6月30日流通A股发生变动
setSysParam(PN_Stock(), 'SZ000001');
t := infoArray(16); // 股票.股本结构表
r1 := stockAmount(t, 20110630, 0, '变动日', '流通A股'); // Date当天
r2 := stockAmount(t, 20110630, 1, '变动日', '流通A股'); // Date之前
return array(r1, r2);
// 结果:array(3105358672.0,3105358511.0)

seperateTable(t, sep_field, sep_count)

把表格t分割为SepCount个表格。

参数 类型 说明
t array 数据表类型,原始数组
sep_field string 字符串,排序字段
sep_count integer 整数,分割数

返回:array

示例

t := `array('a': (1, 2, 3, 4), 'b': (2, 3, 4, 5), 'c': (3, 4, 5, 6), 'd': (4, 5, 6, 7), 'e': (5, 6, 7, 8), 'f': (7, 8, 9, 10));
return seperateTable(t, 'a', 2);
// 返回:

unitary(t, key_fields, _type, f_value)

归一处理。对数组t指定列KeyFields进行归一处理,归一方式由Type决定。

参数 类型 说明
t array,tablearray
key_fields string
_type integer
f_value integer

返回:array,tablearray

示例

t := `array('a': (1, 2, 3, 4), 'b': (2, 3, 4, 5), 'c': (3, 4, 5, 6), 'd': (4, 5, 6, 7), 'e': (5, 6, 7, 8), 'f': (7, 8, 9, 10));
unitary(t, 'b', 0, 10);
return t;
// 返回:

tableVectorizeArray(t, s, opt, is_func)

数据表与一维数据表的矢量化运算。

参数 类型 说明
t array 数据表
s array|real 一维数组 或实数, 运算标量
opt string 字符串,操作运算符,默认"-",表逐行减法
is_func bool 布尔,opt是否是函数,默认假

返回:array

示例

t := ones(10, 3);
s := array(1, 2, 3);
return tableVectorizeArray(t, s, '-');
// 输出:
// Execute script error at Line:3
// function:__main__:line 3:instruction:usercall: function:tableVectorizeArray compile error or not found
// function:__main__:line 3:instruction:usercall: function execute error

reverse(arr)

数组倒置反向。

参数 类型 说明
arr array 数组

返回:array

示例

// 倒置数组
setSysParam(pn_stock(), "SZ000002");
setSysParam(pn_date(), 20210601t);
arr := nDay(10, "date", dateToStr(sp_time()), "close", close());
return reverse(arr);
// 输出:
// Execute script error at Line:5
// function:__main__:line 5:instruction:usercall: function:reverse compile error or not found
// function:__main__:line 5:instruction:usercall: function execute error

descartesJoin(v1, v2, v_n)

数组笛卡尔积连接。

参数 类型 说明
v1 任意类型,支持不定个数参数,数值1
v2 任意类型,数值2
v_n 任意类型,数值3

返回:array,tablearray

示例

return descartesJoin(1->3, 21->22, 3);
// 输出:
// Execute script error at Line:1
// function:__main__:line 1:instruction:->: function:descartesJoin compile error or not found
// function:__main__:line 1:instruction:->: function execute error

abnormalData(y, flag, ystore)

数组中出现奇异值的处理。其中y为数据表,Flag为处理方法,Ystore为选择中位数和3倍标准差法返回被处理数据的数据。

参数 类型 说明
y array 一维数字数组
flag string 用户自定义,奇异值处理方法
ystore array 数据表类型,存放修改的数据,包括修改的行、原数值、处理后的值

返回:any

示例

范例01:返回奇异值的位置及处理后的结果。

t := array(1, 100, 101, 102, 103, 1000);
abnormalData(t, "median", r);
return r;
// 返回:
// 其中,0和5为修改的行,1和1000是对应的原值,93.7和109.3是修改后的值

范例02:对源数据列增加一列奇异值处理后的结果

col := 'SH000001';
setSysParam(pn_stock(), col);
setSysParam(pn_date(), 20240930T);
setSysParam(pn_cycle(), cy_day());
days := 100;
// SH000001在20240930最近100天的行情数据中设置三个奇异值
t := nDay(days, '日期', dateToStr(sp_time()), col, close());
t[29, col] := 1500;
t[59, col] := 4500;
t[79, col] := 6000;
// 找到数组指定列奇异值,以中位数法为例
tyc := abnormalData(t[: , col], "median", abn);
t[: , col$"_奇异值处理"] := tyc;
return t;
// 输出:增加列"SH000001_奇异值处理"

zValue(t, column_name)

按照指定字段求Z值。

参数 类型 说明
t array 数据表类型,数据表
column_name string 字符串,要计算Rank的字段

返回:any

示例

stock_arr := getBkByDate('SH000016', 20190201T);
s := select ['StockID'] as '代码',
["StockName"] as "名称",
['price'] as '收盘',
stockZf(['date'], ['date']) as '涨幅(%)'
from markettable datekey 20190201T to 20190201T of stockArr end;
zValue(s, '涨幅(%)');
return s
// 返回:

rpsValue(t, column_name)

按照指定字段求RPS。

参数 类型 说明
t array 数据表类型,数据表
column_name string 字符串,要计算RPS的字段

返回:any

示例

stock_arr := getBkByDate('SH000016', 20190201T);
s := select ['StockID'] as '代码',
["StockName"] as "名称",
['price'] as '收盘',
stockZf(['date'], ['date']) as '涨幅(%)'
from markettable datekey 20190201T to 20190201T of stockArr end;
rpsValue(s, '涨幅(%)');
return s;
// 返回:

webFormatToRung(a)

将数组Nan/Nil/±Inf替换为"-"

参数 类型 说明
a array 数组,待替换数组,支持多维数组,高维嵌套数组

返回:any

示例

a := array('a': ('b': ('c': (nil, nan, 3), 'd': 2), 'e': nan));
return webFormatToRung(a); // array("a":("b":("c":("-","-",3),"d":2),"e":"-"))

factorize(value, ifsort, nan_fill_value, uniques)

分类变量数值映射,将一个一维分类变量数组映射为给分类变量递增编号后的数值数组

参数 类型 说明
value array 数组,一维数组
ifsort bool 布尔型,是否排序,默认不排序
nan_fill_value any 数字/字符串,填充nan的值,默认为-1
uniques array 数组,输出,各值对应的原值

返回:array

示例

value := Array('a', 'd', 'c', 'a', 'b');
labels := factorize(value, true, -1, uniques);
echo uniques; // array("a","b","c","d")
return labels; // array(0,3,2,0,1);

sparseMatFill(a, fillv)

稀疏数据表填充,直接在A矩阵上更改

参数 类型 说明
a array,tablearray 数据表类型,稀疏矩阵
fillv real 实数,给定的填充值

返回:array,tablearray

示例

a := array((3: 4), ('A': 2));
sparseMatFill(a, -1);
return a; // array((3:4,"A":-1),(3:-1,"A":2))

elementWhere(con, x, y)

根据布尔数组con,为True时从X中,为False时从Y中,取对应位置元素的值

参数 类型 说明
con array,tablearray
x array,tablearray
y array,tablearray

返回:array,tablearray

示例

con := array(1, 0, 1, 1, 1, 0);
x := array(1, 2, 3, 4, 5, 6);
y := array(11, 12, 13, 14, 15, 16);
return elementWhere(con, x, y); // array(1,12,3,4,5,16)

arrayAddGap(t, key, v, m)

数组添加分割线,只支持字符串下标

参数 类型 说明
t array 数组,待添加数组,直接在原数组更改
key string 字符串,间隔名,默认无
v string 字符串,间隔串,默认为 DupeString('-',m*2)
m integer 整型,间隔串的长度设置,默认 5

返回:array

示例

a := array('alpha(%)': 3);
arrayAddGap(a, '风险');
a['beta'] := 3;
return a; // array("alpha(%)":3,"-----风险-----":"----------","beta":3)

groupPercentrankIt(t, g_name, v_name)

计算分组百分位,对数据表t按[GName]分组后,对每组的[Vname_]计算百分位

参数 类型 说明
t array 数组,待计算的数组
g_name string 字符串,分组字段名
v_name string 字符串,转换字段名

返回:array

示例

t := array(("G": 1, "V1": 1, "V2": 11, "V3": 21),
("G": 0, "V1": 2, "V2": 12, "V3": 22),
("G": 1, "V1": 3, "V2": 13, "V3": 23),
("G": 0, "V1": 4, "V2": 14, "V3": 24),
("G": 1, "V1": 5, "V2": 15, "V3": 25),
("G": 0, "V1": 6, "V2": 16, "V3": 26));
return groupPercentrankIt(t, 'G', 'V1'); // array(0.0,0.0,0.5,0.5,1.0,1.0)

groupRankIt(t, g_name, v_name, sort_order)

计算分组排名,对数据表t按[GName]分组后,对每组的[Vname_]计算排名

参数 类型 说明
t array 数组,待计算的数组
g_name string 字符串,分组字段名
v_name string 字符串,转换字段名
sort_order bool 布尔型,排名方向

返回:array

示例

t := array(
("G": 1, "V1": 1, "V2": 11, "V3": 21),
("G": 0, "V1": 2, "V2": 12, "V3": 22),
("G": 1, "V1": 3, "V2": 13, "V3": 23),
("G": 0, "V1": 4, "V2": 14, "V3": 24),
("G": 1, "V1": 5, "V2": 15, "V3": 25),
("G": 0, "V1": 6, "V2": 16, "V3": 26));
return groupRankIt(t, 'G', 'V1'); // array(1,1,2,2,3,3)

groupTransformByFunc(t, g_name, v_name, fp)

计算分组排名,对数据表t按[GName]分组后,对每组的[Vname_]根据给定函数进行分组转换操作

参数 类型 说明
t array 数组,待计算的数组
g_name string 字符串,分组字段名
v_name string 字符串或数组,转换字段名
fp string 字符串(函数名)或函数指针,转换函数必须两个参数,分别表示当前的聚合字段与排名字段,以分组排名为例:

返回:array

示例

t := array(("G": 1, "V1": 1, "V2": 11, "V3": 21),
("G": 0, "V1": 2, "V2": 12, "V3": 22),
("G": 1, "V1": 3, "V2": 13, "V3": 23),
("G": 0, "V1": 4, "V2": 14, "V3": 24),
("G": 1, "V1": 5, "V2": 15, "V3": 25),
("G": 0, "V1": 6, "V2": 16, "V3": 26));
fp := function (v, g);
begin
return rankof([v], [v]);
end
return groupTransformByFunc(t, 'G', 'V1', fp); // array(3,3,2,2,1,1)

frameGetSubByReg(data, reg)

通过正则表达式匹配获取数据框子集

参数 类型 说明
data array 数组,待匹配的数组
reg string 字符串,间隔名,正则匹配串

返回:array

示例

t := array((13: 1, "V1": 1, "V2": 11, 12: 21, 'R1w': 1),
(13: 0, "V1": 2, "V2": 12, 12: 22, 'R1w': 1),
(13: 1, "V1": 3, "V2": 13, 12: 23, 'R1w': 1),
(13: 0, "V1": 4, "V2": 14, 12: 24, 'R1w': 1),
(13: 1, "V1": 5, "V2": 15, 12: 25, 'R1w': 1),
(13: 0, "V1": 6, "V2": 16, 12: 26, 'R1w': 1));
return frameGetSubByReg(t, '1');
// 结果:
array(
(21, 1, "V1": 1, "R1w": 1),
(22, 0, "V1": 2, "R1w": 1),
(23, 1, "V1": 3, "R1w": 1),
(24, 0, "V1": 4, "R1w": 1),
(25, 1, "V1": 5, "R1w": 1),
(26, 0, "V1": 6, "R1w": 1))

histogram(t, bins, format)

统计data的频数分布表

参数 类型 说明
t array,tablearray 数字数组,待计算的数组
bins array,tablearray 数组,表分组间隔
format string 字符串,展示区间的格式串,见FormatFloat

返回:array,tablearray

示例

范例一:

return histogram(Randn(0, 1, 1000), array(-3, 0.5)->3, '0.00');
// 输出:
// Execute script error at Line:1
// function:__main__:line 1:instruction:usercall: function:Randn compile error or not found
// function:__main__:line 1:instruction:usercall: function execute error

范例二:

data := randn(0, 1, 1000, array('a', 'b'));
return histogram(data, array(-3, 0.5)->3, '0.00');
// 输出:
// Execute script error at Line:1
// function:__main__:line 1:instruction:array: function:randn compile error or not found
// function:__main__:line 1:instruction:array: function execute error

framemerge(left, right, ons, how)

数据表-联结

参数 类型 说明
left table Table,左表
right table Table,右表
ons string String,联结字段,可以为数组
how string String,: 联结类型

返回:array

示例

范例1

left := `array('a': 3->5, 'b': rand(3));
right := `array('a': 1->4, 'b': rand(4), 'c': rand(4) * 10);
return framemerge(left, right, 'a');

范例2

// 多字段merge
left := `array('a': 3->5, 'b': rand(3));
left[: , 'c'] := left[: , 'a'];
right := `array('a': 1->4, 'b': rand(4), 'c': rand(4) * 10);
right[: , 'c'] := right[: , 'a'];
names := array('a', 'c');
return framemerge(left, right, name, 'lfet', nil, true);

范例3

// 只更名right
left := `array('a': 3->5, 'b': rand(3));
right := `array('a': 1->4, 'b': rand(4), 'c': rand(4) * 10);
return framemerge(left, right, 'a', 'full', array(nil, '_x'));

frameqcut(data, q)

数据表-按频率分组(等频分组)

参数 类型 说明
data table Table,数据表或一维数字数组,数据表时,表示对
q integer Integer,分组数,等分q组,正整数,默认q=5

返回:array

frameupdate(left, right, ons, _type, _type)

数据表-更新

参数 类型 说明
left table Table,待更新数据,直接更改
right table Table,右表
ons string String,键字段,默认为nil,表以下标进行联结。
_type integer Integer,缺失类型,详见MF_isMissValue
_type integer 为以下数值的组合(以下数值的_XOR或者相加)

返回:array

示例

left := `array('a': 3->5, 'b': rand(3));
right := `array('a': 1->4, 'b': rand(4), 'c': rand(4) * 10);
return frameupdate(left, right, 'a');

groupZscoreIt(t, g_name, v_name)

1.计算分组标准化,对数据表t按[GName]分组后,对每组的[Vname_]进行标准化(原值-分组平均)/分组标准差

参数 类型 说明
t array 数组,待计算的数组
g_name string 字符串,分组字段名
v_name string 字符串,转换字段名。如果Vname为nil则表示除GName之外的所有字段,如果Vname为一个数组,则表示需要计算的字段组返回:二维数组,

返回:array

示例

t := array(
("G": 1, "V1": 1, "V2": 11, "V3": 21),
("G": 0, "V1": 2, "V2": 12, "V3": 22),
("G": 1, "V1": 3, "V2": 13, "V3": 23),
("G": 0, "V1": 4, "V2": 14, "V3": 24),
("G": 1, "V1": 5, "V2": 15, "V3": 25),
("G": 0, "V1": 6, "V2": 16, "V3": 26));
return groupZscoreIt(t, 'G', 'V1');? // array(-1.0,-1.0,0.0,0.0,1.0,1.0)

framecut(a, bins, option, o_lables)

从小到大分段分组,最小的为第0组

参数 类型 说明
a array 数据表或一维数字数组,数据表时,表示对每列分别操作
bins array 一维数字数组,分段节点,例如array(0,1)将数组a分为[-inf,0)[0,1)[1,inf)三段,
option integer 整型,区间开/闭,默认为0
o_lables integer 数组,输出分组区间说明

返回:array

示例

范例1

a := array(0, 59, 60, 70, 80, 99, 100);
bins := array(60, 80);
return framecut(a, bins, 0);
// array(0,0,1,1,2,2,2)

范例2

a := array(0, 59, 60, 70, 80, 99, 100);
bins := 5;
return framecut(a, bins, 0);
// array(0,2,3,3,4,4,4)

frameMelt(t, id_names, value_names, variable_sname, value_sname)

二维表——>立体表

参数 类型 说明
t array 二维字符串数组,数据表
id_names array 一维字符串数组,键字段
value_names array 一维字符串数组,值字段。为nil或者空时,表每行除开键字段外都是值字段
variable_sname string 字符串,变量展示名
value_sname string 字符串,值展示名

返回:array

示例

t := array(
('截止日': 20210101, 'SH000300': 1, 'SH000301': 3),
('截止日': 20210102, 'SH000300': 9, 'SH000301': 2),
);
id_names := array('截止日');
return frameMelt(t, '截止日', nil, '代码', '得分');
// 输出:
// 示例包含说明文字,未作为可执行片段运行。

groupDemeanIt(t, g_name, v_name)

1、分组去均值,对数据表t按[GName]分组后,对每组的[VName]去均值

参数 类型 说明
t dbdata 数据表,待分组去均值数据
g_name string 字符串,t的分组字段名
v_name string 字符串,去均值字段名

返回:array

示例

范例1

t := array(
("G": 1, "V1": 1, "V2": 11, "V3": 21),
("G": 0, "V1": 2, "V2": 12, "V3": 22),
("G": 1, "V1": 3, "V2": 13, "V3": 23),
("G": 0, "V1": 4, "V2": 14, "V3": 24),
("G": 1, "V1": 5, "V2": 15, "V3": 25),
("G": 0, "V1": 6, "V2": 16, "V3": 26));
return groupDemeanIt(t, 'G', 'V1'); // array(-2.0,-2.0,0.0,0.0,2.0,2.0)

范例2

t := array(
("G": 1, "V1": 1, "V2": 11, "V3": 21),
("G": 0, "V1": 2, "V2": 12, "V3": 22),
("G": 1, "V1": 3, "V2": 13, "V3": 23),
("G": 0, "V1": 4, "V2": 14, "V3": 24),
("G": 1, "V1": 5, "V2": 15, "V3": 25),
("G": 0, "V1": 6, "V2": 16, "V3": 26));
return groupDemeanIt(t, 'G', array('V1', 'V2'));
// 输出:
// Execute script error at Line:8
// function:__main__:line 8:instruction:array: function:groupDemeanIt compile error or not found
// function:__main__:line 8:instruction:array: function execute error

arrDropDuplicate(data)

数组去重(包含NAN)。

参数 类型 说明
data array 数据表类型。数据表。

返回:array

示例

data := array(("A": 1, "B": nan), ("A": 1, "B": 2), ("A": 1, "B": nan), ("A": 1, "B": 2));
return arrDropDuplicate(data);
// 结果:array(("A":1,"B":NAN),("A":1,"B":2))

getSubTableByField(t)

获取表t中的Fields 列的数据。该函数功能可以用子矩阵的方式实现:t[:,array(fn1,fn2...)]

参数 类型 说明
t array 数据表类型,数据表

返回:any

示例

setSysParam(pn_stock(), 'SZ000001');
r := nDay(10, 'time', dateToStr(sp_time()), 'close', close(), 'open', open(), 'high', high());
return getSubTableByField(r, 'time;close');
// 功能相当于使用子矩阵取数
return r[: , array('time', 'close')];
// 返回:

arraygetdefault(r, k, v)

带默认值的数组取值,取指定下标的值,若存在则返回,否则返回设定的默认值

参数 类型 说明
r array of string Array of string,
k string String,下标
v string String,默认值

返回:any

arraysetdefault(r, k, v)

带默认值的数组赋值(字段未使用则赋值)

参数 类型 说明
r array of string Array of string,
k string String,下标
v string String,默认值

返回:bool

arraysetdefault2(r, k, v)

带默认值的数组赋值(值为nil则赋值)

参数 类型 说明
r array of string Array of string,
k string String,下标
v string String,默认值

返回:bool

randomchoice(avalues, size, replace)

随机抽样

参数 类型 说明
avalues array of string Array of string,一维字符串数组,或正整数
size integer Integer,
replace bool Bool,是否可放回,默认为真可放回

返回:any

filterIntersectionPart(t1, t2, f_name, method)

求两个数组在指定列名上的差集、交集、并集

参数 类型 说明
t1 array 数据表
t2 array 数据表
f_name string 指定列名字符串
method string 方法,’IN’交集,’NOT IN’差集,’ALL’并集,字符串

返回:array

示例

t1 := array(('a': 1, 'b': 10, 'c': 13), ('a': 2, 'b': 17, 'c': 13));
t2 := array(('a': 2, 'b': 22, 'c': 23), ('a': 1, 'b': 14, 'c': 13), ('a': 3, 'b': 12, 'c': 13));
return filterIntersectionPart(t1, t2, 'a', 'IN'); // t1 与t2的交集
// 输出:
// 示例包含说明文字,未作为可执行片段运行。

filterIntersectionPart2(t1, t2, method)

求两个数组的差集、交集、并集。只适用一维数组。

参数 类型 说明
t1 array 一维数据表
t2 array 一维数据表
method string 方法,’IN’交集,’NOT IN’差集,’ALL’并集,字符串

返回:array

示例

t1 := array(1, 2, 3, 4);
t2 := array(3, 4, 5, 6);
return filterIntersectionPart2(t1, t2, 'IN'); // t1 与t2的交集
// 输出:
// 示例包含说明文字,未作为可执行片段运行。

averageByColumn(t, f_name)

求指定列的平均值

参数 类型 说明
t array 数据表
f_name string 指定列名

返回:real

示例

t1 := array(('a': 1, 'b': 4, 'c': 9), ('a': 7, 'b': 8, 'c': 5));
return averageByColumn(t1, 'b');
// 结果:6

harMeanByColumn(t, f_name)

指定列的调和平均值

参数 类型 说明
t array 数据表
f_name string 指定列名

返回:real

示例

t1 := array(('a': 1, 'b': 4, 'c': 9), ('a': 7, 'b': 5, 'c': 5));
return harMeanByColumn(t1, 'b');
// 结果:4.44

geoMeanByColumn(t, f_name)

指定列的几何平均值

参数 类型 说明
t array 数据表
f_name string 指定列名

返回:real

示例

t1 := array(('a': 1, 'b': 4, 'c': 9), ('a': 7, 'b': 5, 'c': 5));
return geoMeanByColumn(t1, 'b');
// 结果:4.47

devsqByColumn(t, f_name)

指定列平均值偏差的平方和

参数 类型 说明
t array 数据表
f_name string 指定列名

返回:real

示例

t1 := array(('a': 1, 'b': 4, 'c': 9), ('a': 7, 'b': 5, 'c': 5));
return devsqByColumn(t1, 'b');
// 结果:0.5

kurtByColumn(t, f_name)

指定列的峰度

参数 类型 说明
t array 数据表
f_name string 指定列名

返回:real

示例

t2 := array(('a': 2, 'c': 13), ('a': 3, 'c': 33), ('a': 3, 'c': 43), ('a': 5, 'c': 53));
return kurtByColumn(t2, 'c');
// 结果:0.34

medianByColumn(t, f_name)

指定列的中位数

参数 类型 说明
t array 数据表
f_name string 指定列名,字符串

返回:real

示例

t2 := array(('a': 2, 'c': 13), ('a': 3, 'c': 33), ('a': 3, 'c': 43), ('a': 5, 'c': 53));
return medianByColumn(t2, 'c');
// 结果:38

skewByColumn(t, f_name)

指定列的偏度

参数 类型 说明
t array 数据表
f_name string 指定列名,字符串

返回:real

示例

t2 := array(('a': 2, 'c': 13), ('a': 3, 'c': 33), ('a': 3, 'c': 43), ('a': 5, 'c': 53));
return skewByColumn(t2, 'c');
// 结果:-0.75

stdevByColumn(t, f_name)

指定列的标准差

参数 类型 说明
t array 数据表
f_name string 指定列名,字符串

返回:real

示例

t2 := array(('a': 2, 'c': 13), ('a': 3, 'c': 33), ('a': 3, 'c': 43), ('a': 5, 'c': 53));
return stdevByColumn(t2, 'c');
// 结果:17.08

varByColumn(t, f_name)

指定列的方差

参数 类型 说明
t array 数据表
f_name string 指定列名,字符串

返回:real

示例

t2 := array(('a': 2, 'c': 13), ('a': 3, 'c': 33), ('a': 3, 'c': 43), ('a': 5, 'c': 53));
return varByColumn(t2, 'c');
// 结果:291.67

aveDevByColumn(t, f_name)

指定列与平均值的绝对偏差的平均值

参数 类型 说明
t array 数据表
f_name string 指定列名,字符串

返回:real

示例

t2 := array(('a': 2, 'c': 13), ('a': 3, 'c': 33), ('a': 3, 'c': 43), ('a': 5, 'c': 53));
return aveDevByColumn(t2, 'c');
// 结果:12.5

percentValueByField(t, key_field, quart)

数据集在指定百分位数上对应的数值

参数 类型 说明
t array 数据表
key_field string 指定列名,字符串
quart real 指定分位数,实数

返回:real

示例

t2 := array(('a': 2, 'c': 13), ('a': 3, 'c': 33), ('a': 3, 'c': 43), ('a': 5, 'c': 53));
return percentValueByField(t2, 'c', 0.1);
// 结果:19

statByColumn(t, fname, _type)

依据Type传递的字符串,返回字段Fname序列的type值。

参数 类型 说明
t array 数据表类型,数据
fname string 字符串,字段名称
_type string 字符串,返回类型

返回:any

示例

s := `array('a': (1, 2, 3, 4, 5), 'b': (-2, -3, -4, 5, 6), 'c': (3, 4, 5, 6, 7), 'd': (4, 5, 6, 7, 8));
return statByColumn(s, 'a', 'MAX');
// 返回a列最大值:5

describe(data, percentiles)

简单描述统计

参数 类型 说明
data array of number 一维数字数组,或 二维矩阵。二维矩阵时,对每列进行操作
percentiles array of number 统计的分位点,默认取array(0.25,0.5, 0.75)

返回:array

示例

范例01:

load_dataset_iris(data);
return describe(data);

范例02:

return describe(randn(0, 1, 1000), array(0.05, 0.1)->0.95);

framecorrel(data)

数据表-相关系数矩阵

参数 类型 说明
data table Table,二维数据表,列名可为字符串,不支持一维数组

返回:array

示例

data := TSUT_Data_ZSZF()[: , 1:];
return framecorrel(data);

framecov(data)

数据表-协方差

参数 类型 说明
data table Table,二维数据表,列名可为字符串。不支持一维数组

返回:array

示例

data := TSUT_Data_ZSZF()[: , 1:];
return framecov(data);

framehhi(data)

数据表-HHI指数、赫芬达尔—赫希曼指数

参数 类型 说明
data table Table,数组

返回:array

framevaluecounts(data, countfieldname, iforder)

数据表-计数

参数 类型 说明
data table Table,可以为二维数据表或者为一维数组
countfieldname string String,计数字段名,默认为""个数""
iforder bool Bool,是否排序,默认为真

返回:array

simpledescribe(data)

简单描述统计

参数 类型 说明
data array of number 一维数字数组,或 二维矩阵,二维矩阵时,对每列进行操作

返回:array

示例

范例01

load_dataset_iris(data);
return simpledescribe(data);

范例02

return simpledescribe(randn(0, 1, 1000), array(0.05, 0.1)->0.95);

renameFieldByFormat(t, ifcopy)

通过格式字符串修改列名。

参数 类型 说明
t array 数组类型,数据
ifcopy bool 布尔类型,是否在拷贝后的数组改列名,默认True

返回:array

示例

// 给随机数组批量加后缀
t := rand(10, 10);
suffix := '%s'$"@A";
ifcopy := true;
return renameFieldByFormat(t, suffix, ifcopy);
// 输出:
// Execute script error at Line:5
// function:__main__:line 5:instruction:usercall: function:renameFieldByFormat compile error or not found
// function:__main__:line 5:instruction:usercall: function execute error

sparse1(s, a, m, n)

挤出任何非零元素,将满矩阵转化为稀疏格式,与Sparsefull函数对应。

参数 类型 说明
s array of real 待转化的m*n满矩阵
a array of real 变参返回矩阵S的稀疏格式,二维数组
m integer 变参返回矩阵S的行数,整数
n integer 变参返回矩阵S的列数,整数

返回:array

示例

// 将矩阵S由满矩阵格式转化为稀疏格式
s := array((0, 0, 4, 0, 0),
(0, 1, 0, 0, 0),
(0, 0, 0, 0, 0),
(3, 0, 0, 0, 0),
(0, 0, 0, 0, 5));
return sparse1(s);
// 输出:
// Execute script error at Line:7
// function:__main__:line 7:instruction:usercall: function:sparse1 compile error or not found
// function:__main__:line 7:instruction:usercall: function execute error

sparse2(i, j, v, m, n)

根据i、j和v三元组生成m*n稀疏格式矩阵S

参数 类型 说明
i array of real 存放矩阵行标的一元数组
j array of real 存放矩阵列标的一元数组
v array of real 存放矩阵元素值的一元数组
m integer 矩阵的行数,整数
n integer 矩阵的列数,整数

返回:array

示例

// 根据i,j,v三元组生成稀疏格式矩阵
i := array(0, 1, 2, 3);
j := array(3, 1, 4, 2);
v := array(5, 3, 2, 4);
return sparse2(i, j, v, 5, 5);
// 输出:
// Execute script error at Line:5
// function:__main__:line 5:instruction:usercall: function:sparse2 compile error or not found
// function:__main__:line 5:instruction:usercall: function execute error

speye(m)

创建m*m稀疏单位矩阵,指定为方阵

参数 类型 说明
m integer 稀疏单位矩阵的尺寸,整数

返回:array

示例

// 创建m*m稀疏单位矩阵
a := speye(4);
return a;
// 输出:
// Execute script error at Line:2
// function:__main__:line 2:instruction:usercall: function:speye compile error or not found
// function:__main__:line 2:instruction:usercall: function execute error

sprand1(s)

创建与矩阵S结构相同的稀疏格式矩阵,并将其中的非零元素替换为均匀分布随机数

参数 类型 说明
s array of real 稀疏矩阵

返回:array

示例

// 创建与矩阵S相同结构的稀疏均匀随机矩阵
s := array((0, 0, 3, 0, 0),
(0, 0, 0, 0, 0),
(0, 0, 0, 5, 0),
(0, 2, 0, 0, 0),
(0, 0, 0, 0, 4));
return sprand1(s);
// 输出:
// Execute script error at Line:7
// function:__main__:line 7:instruction:usercall: function:sprand1 compile error or not found
// function:__main__:line 7:instruction:usercall: function execute error

sprand2(m, n, pct)

创建m*n稀疏均匀随机矩阵,其中非零元素所占比例为pct

参数 类型 说明
m integer 矩阵的行数,整数
n integer 矩阵的列数,整数
pct real 矩阵中非零元素所占比例,实数

返回:array

示例

// 创建10*10稀疏均匀随机矩阵
a := sprand2(10, 10, 0.3);
return a;
// 输出:
// Execute script error at Line:2
// function:__main__:line 2:instruction:usercall: function:sprand2 compile error or not found
// function:__main__:line 2:instruction:usercall: function execute error

sprandn1(s)

创建与矩阵S结构相同的稀疏格式矩阵,并将其中的非零元素替换为正态分布随机数

参数 类型 说明
s array of real 稀疏矩阵

返回:array

示例

// 创建与矩阵S相同结构的稀疏正态随机矩阵
s := array((0, 0, 0, 0, 0),
(0, 0, 0, 5, 0),
(3, 0, 0, 0, 0),
(0, 0, 2, 0, 0),
(0, 0, 0, 0, 4));
return sprandn1(s);
// 输出:
// Execute script error at Line:7
// function:__main__:line 7:instruction:usercall: function:sprandn1 compile error or not found
// function:__main__:line 7:instruction:usercall: function execute error

sprandn2(m, n, pct)

创建m*n稀疏正态随机矩阵,其中非零元素所占比例为pct

参数 类型 说明
m integer 矩阵的行数,整数
n integer 矩阵的列数,整数
pct real 矩阵中非零元素所占比例,实数

返回:array

示例

// 创建10*10稀疏正态随机矩阵
a := sprandn2(10, 10, 0.2);
return a;
// 输出:
// Execute script error at Line:2
// function:__main__:line 2:instruction:usercall: function:sprandn2 compile error or not found
// function:__main__:line 2:instruction:usercall: function execute error

sprandsym1(s)

创建与矩阵S结构相同的稀疏格式矩阵,以下三角矩阵为基准的对称正态分布随机矩阵

参数 类型 说明
s array of real 稀疏矩阵

返回:array

示例

// 创建与矩阵S相同结构的对称稀疏正态随机矩阵
s := array((6, 1, 0, 14, 0),
(0, 7, 0, 0, 15),
(1, 0, 8, 0, 0),
(0, 2, 0, 9, 0),
(0, 0, 3, 0, 10));
return sprandsym1(s);
// 输出:
// Execute script error at Line:7
// function:__main__:line 7:instruction:usercall: function:sprandsym1 compile error or not found
// function:__main__:line 7:instruction:usercall: function execute error

sprandsym2(n, pct)

创建n*n稀疏正态随机矩阵,以下三角矩阵为基准对称正态分布随机矩阵,其中非零元素所占比例大约为pct

参数 类型 说明
n integer 方阵的尺寸,整数
pct real 方阵中非零元素所占比例,实数

返回:array

示例

// 创建10*10对称稀疏正态随机矩阵
a := sprandnsym2(10, 0.2);
return a;
// 输出:
// Execute script error at Line:2
// function:__main__:line 2:instruction:usercall: function:sprandnsym2 compile error or not found
// function:__main__:line 2:instruction:usercall: function execute error

sparsefull(s, m, n)

将稀疏矩阵格式转化为满矩阵,与Sparse1函数相对应。

参数 类型 说明
s array of real 稀疏格式矩阵
m integer 转化为满矩阵的行数,整数
n integer 转化为满矩阵的列数,整数

返回:array

示例

// 将S由稀疏格式矩阵转化为5*5满矩阵格式
s := array(0: (0: 1), 2: (2: 3), 3: (3: 4));
return sparsefull(s, 5, 5);
// 输出:
// Execute script error at Line:3
// function:__main__:line 3:instruction:usercall: function:sparsefull compile error or not found
// function:__main__:line 3:instruction:usercall: function execute error

spones(s, n)

将稀疏矩阵S中的非零元素替换为n

参数 类型 说明
s array of real 稀疏矩阵
n real 非零元素被替换的值,实数

返回:array

示例

// 将S中非零元素替换为1
s := array(0: (0: 1), 2: (2: 3), 3: (3: 4));
return spones(s, 1);
// 输出:
// Execute script error at Line:3
// function:__main__:line 3:instruction:usercall: function:spones compile error or not found
// function:__main__:line 3:instruction:usercall: function execute error

spnnz(s)

稀疏矩阵S中的非零元素数目

参数 类型 说明
s array of real 稀疏矩阵

返回:integer

示例

// 稀疏正态随机矩阵A中非零元素数目
a := sprandn2(5, 5, 0.2);
return spnnz(a); // 返回4(随机)

spnonzeros(s)

提取稀疏矩阵S中的非零元素

参数 类型 说明
s array of real 稀疏矩阵

返回:array

示例

// 提取稀疏正态随机矩阵A中非零元素
a := sprandn2(5, 5, 0.2);
return spnonzeros(a);
// 输出:
// Execute script error at Line:2
// function:__main__:line 2:instruction:usercall: function:sprandn2 compile error or not found
// function:__main__:line 2:instruction:usercall: function execute error

ifsparse(s)

判断是否为稀疏矩阵。检查条件:只检查下标,下标全为大于等于0的整数。

参数 类型 说明
s array of real 待判断矩阵

返回:integer

示例

// 判断矩阵S是否为稀疏矩阵
s := Array(3: 2, "B": 3);
return ifsparse(s); // 返回0

spdiags1(a)

提取矩阵非零对角线

参数 类型 说明
a array Array,二维数组,原(稀疏)矩阵

返回:array

示例

// 提取矩阵A中非零对角线
a := array((6, 0, 13, 0, 0),
(0, 7, 0, 14, 0),
(1, 0, 8, 0, 15),
(0, 2, 0, 9, 0),
(0, 0, 3, 0, 10));
return spdiags1(a);

spdiags2(a, d)

提取矩阵指定对角线

参数 类型 说明
a array Array,二维数组,原(稀疏)矩阵
d array Array,一维数组,对角线序列;也可以为数字;

返回:array

示例

// 提取矩阵A中第-2,0,2条对角线,按列排列
a := array((6, 0, 13, 0, 0),
(0, 7, 0, 14, 0),
(1, 0, 8, 0, 15),
(0, 2, 0, 9, 0),
(0, 0, 3, 0, 10));
d := array(-2, 0, 2);
return spdiags2(a, d);

spdiags3(b, d, a)

根据指定列替换稀疏矩阵对角线

参数 类型 说明
b array Array,二维数组,对角矩阵
d array Array,一维数组,对角线序列
a array Array,二维数组,原(稀疏)矩阵

返回:array

示例

// 将矩阵A中d指定的对角线替换为B中的列
b := array((5, 10, 15),
(4, 9, 14),
(3, 8, 13),
(2, 7, 12),
(1, 6, 11));
d := array(-2, 0, 2);
a := array((6, 0, 13, 0, 0),
(0, 7, 0, 14, 0),
(1, 0, 8, 0, 15),
(0, 2, 0, 9, 0),
(0, 0, 3, 0, 10));
return spdiags3(b, d, a);

spdiags4(b, d, m, n)

根据指定列创建稀疏矩阵

参数 类型 说明
b array Array,二维数组,对角矩阵
d array Array,一维数组,对角线序列
m integer Integer,正整数,(稀疏)矩阵的行
n integer Integer,正整数,(稀疏)矩阵的列

返回:array

示例

// 根据对角矩阵B创建稀疏带状矩阵
b := array((5, 10, 15),
(4, 9, 14),
(3, 8, 13),
(2, 7, 12),
(1, 6, 11));
d := array(-2, 0, 2);
m := 5;
n := 5;
return spdiags4(b, d, m, n);

compareDataOfDifferentDataProvider(t_src, t_dest, src_provider, dest_provider, key_arr, value_arr, code_field)

比较两个数据源的差异

参数 类型 说明
t_src array Array 源数据
t_dest array Array 目标数据
src_provider string String 源数据提供商
dest_provider string String 目标数据提供商
key_arr array Array 要比较表的Key字段(也就是数据表中的 唯一性字段)
value_arr array Array 要比较的Value字段
code_field string String 代码字段(任何数据,都必须有编码字段)

返回:array

pivot(t, index, vals)

透视,数据透视表

参数 类型 说明
t array 二维数组,待透视表,t[:,array(index,columns)] 不能包含重复的行,即index,column 必须可以作为t的唯一主键
index string | array 字符串或一维字符串数组,行分类字段,t的列名,多个字段可以用数组,为nil表示取t的行下标
vals string | array 字符串或一维字符串数组,值字段,t的列名,多个字段可以用数组,

返回:array

示例

// 指定条件,行标为日期,列标为名称,值为收盘价、涨幅、振幅的数据透视表
stocks := array("SZ000001", "SZ000002", "SH600050", "SZ300775");
begt := 20210515T;
endt := 20210525T;
t := select ['StockID'] as "代码",
["StockName"] as "名称",
dateToStr(['date']) as "日期",
["close"] as "收盘价",
spec(specDate(stockZf3(), ['date']), ['StockID']) as "涨幅",
spec(specDate(stockZdf3(), ['date']), ['StockID']) as "振幅",
spec(base(10029), ['StockID']) as "申万行业"
from markettable datekey begt to endt of stocks end;
index := "日期";
colunms := "名称";
vals := array("收盘价", "涨幅", "振幅");
return pivot(t, index, colunms, vals);
// 输出:
// Execute script error at Line:16
// function:__main__:line 16:instruction:usercall: function:pivot compile error or not found
// function:__main__:line 16:instruction:usercall: function execute error

nonIntersectionPart(t1, t2, key_field)

求差集(返回在t1中存在,而在t2中不存在的记录)

参数 类型 说明
t1 array 数据表
t2 array 数据表
key_field string 指定某一字段

返回:array

示例

t1 := array(('a': 1, 'b': 4), ('a': 7, 'b': 8), ('a': 2, 'b': 3));
t2 := array(('a': 1, 'b': 1), ('a': 7, 'b': 8), ('a': 5, 'b': 5));
return nonIntersectionPart(t1, t2, 'b');
// 输出:
// Execute script error at Line:3
// function:__main__:line 3:instruction:usercall: function:nonIntersectionPart compile error or not found
// function:__main__:line 3:instruction:usercall: function execute error

getSubTableByKey(t, key_field, return_fields)

将字符串KeyField以分号分隔,在数组t中从列ReturnFields匹配被分割的值,若找到则返回该行信息,否则返回空数组。

参数 类型 说明
t array 数据表类型,数据表
key_field string 字符串,关键字字段
return_fields string 字符串,要返回的字段名称

返回:array

示例

s := array(array('A': 'a', 'B': 'b', 'C': 'c', 'D': 'd', 'e': 'e'),
array('A': 'c', 'B': 3, 'C': 4, 'D': 5, 'e': 6),
array('A': 3, 'B': 4, 'C': 5, 'D': 6, 'e': 7));
return getSubTableByKey(s, 'A', 'a;c');
// 返回:

expandTable(t, key_field)

按指定字段展开表格,根据Keyfield展开指定列。展开的列值必须二维数据表,否则保留原值。

参数 类型 说明
t array 数组类型,数据
key_field string 字符串类型,关键字,需展开的列名

返回:array

示例

// 按照分红送股列展开数据
data := query("", "SH600000;SZ000002", true, "", "代码", defaultStockId(), "名称",
currentStockName(), "分红送股", infoArray(18));
return expandTable(data, "分红送股");
// 输出:
// Execute script error at Line:4
// function:__main__:line 4:instruction:usercall: function:expandTable compile error or not found
// function:__main__:line 4:instruction:usercall: function execute error

arrayToFm(value, sample_value)

将数组转换为 FMArray,并按样例值确定单元格类型。

参数 类型 说明
value array 输入数组
sample_value float 单元格类型样例;如 0 生成整型单元格,0.0 生成浮点单元格

返回:fmarray