取一个矩阵的列,并在kdb中使其成为一行

时间:2017-06-16 08:58:53

标签: kdb q-lang

考虑矩阵:

1 2 3
4 5 6
7 8 9 

我想取中间列,将其分配给变量,并用它替换中间行,给我

1 2 3
2 5 8
7 8 9 

我正在使用

提取中间列
a:m[;enlist1]

返回

2
5
8

如何用?替换中间行?需要翻转吗?

感谢。

3 个答案:

答案 0 :(得分:3)

如果您想更新矩阵,可以使用

q)show m:(3;3)#1+til 10
1 2 3
4 5 6
7 8 9
q)a:m[;1]
q)m[1]:a
q)show m
1 2 3
2 5 8
7 8 9
q)
切断" a"你所需要的只是:

m[1]:m[;1]

答案 1 :(得分:1)

您可以使用点修改 -

q)show m:(3;3)#1+til 10
    1 2 3
    4 5 6
    7 8 9
q)show a:m[;1]
    2 5 8
q).[m;(1;::);:;a]
    1 2 3
    2 5 8
    7 8 9

可在此处查看文档:

答案 2 :(得分:0)

在可以定义操作,行和列的位置稍微更通用

q)m:3 cut 1+til 9
1 2 3
4 5 6
7 8 9

将中间栏分配到中间行:

q){[ m;o;i1;i2] .[m;enlist i1;o; flip[m] i2 ] }[m;:;1;1]
1 2 3
2 5 8
7 8 9

o作为+

传递,将中间列添加到中间行
q){[ m;o;i1;i2] .[m;enlist i1;o; flip[m] i2 ] }[m;+;1;1]
1 2  3
6 10 14
7 8  9