transpose

语法

transpose(X)

别名:flip(X)

参数

X 是一个元组、矩阵、表或字典、数组向量或列式元组。如果 X 是数组向量或列式元组,则每行包含的元素个数必须相等。

详情

  • 如果 X 是一个元组,每个向量的长度必须相同,transpose 函数返回的是一个与 X 中每个向量长度相同的元组,返回结果中的第 n 个元素是由 X 中每个向量的第 n 个值组成的向量。

  • 如果 X 是一个矩阵,transpose 函数返回 X 的转置矩阵。

  • 如果 X 是一个表,transpose 函数把表 X 转换为一个有序字典(从 2.00.9 版本开始支持有序字典),表中的列名为 key,每列的值为 value。

  • 如果 X 是一个字典,它的 key 必须是 STRING 类型,transpose 函数把字典 X 转换为一个表,key 为列名,每个 key 对应的 value 可以是标量或等长的向量,表示每列的值。

  • 如果 X 是一个数组向量或列式元组,transpose 函数将 X 的行和列转置。

例子

例1. X 是一个元组。

x=(`A`B`C,1 2 3);
x.transpose();
// output:(("A",1),("B",2),("C",3))

例2. X 是一个矩阵。

x=1..6 $ 3:2;
x;
#0 #1
1 4
2 5
3 6
transpose x;
#0 #1 #2
1 2 3
4 5 6

例3. X 是一个表。

timestamp = [09:34:07,09:36:42,09:36:51,09:36:59,09:32:47,09:35:26,09:34:16,09:34:26,09:38:12]
sym = `C`MS`MS`MS`IBM`IBM`C`C`C
price= 49.6 29.46 29.52 30.02 174.97 175.23 50.76 50.32 51.29
qty = 2200 1900 2100 3200 6800 5400 1300 2500 8800
t = table(timestamp, sym, qty, price);
t;
timestamp sym qty price
09:34:07 C 2200 49.6
09:36:42 MS 1900 29.46
09:36:51 MS 2100 29.52
09:36:59 MS 3200 30.02
09:32:47 IBM 6800 174.97
09:35:26 IBM 5400 175.23
09:34:16 C 1300 50.76
09:34:26 C 2500 50.32
09:38:12 C 8800 51.29
transpose(t);
/*
timestamp->[09:34:07,09:36:42,09:36:51,09:36:59,09:32:47,09:35:26,09:34:16,09:34:26,09:38:12]
sym->[C,MS,MS,MS,IBM,IBM,C,C,C]
qty->[2200,1900,2100,3200,6800,5400,1300,2500,8800]
price->[49.6,29.46,29.52,30.02,174.97,175.23,50.76,50.32,51.29]
*/

例4. X 是一个字典。

z=dict(`id`val,[`a`b`c,1 2 3]);
z;
/*
val->[1,2,3]
id->[a,b,c]
*/
transpose(z);
val id
1 a
2 b
3 c
//当字典的 value 既包含标量又包含向量时,transpose 会重复标量的值以匹配向量的长度
z1=dict(`id`val,[`a,1 2 3]);
z1;
transpose(z1)

val

id

1 a
2 a
3 a