获取矩阵的一列并使其成为 kdb 中的一行

Take a column of a matrix and make it a row in kdb

考虑矩阵:

1 2 3
4 5 6
7 8 9 

我想取中间的列,将它赋给一个变量,然后用它替换中间的行,给我

1 2 3
2 5 8
7 8 9 

我正在使用

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

哪个returns

2
5
8

如何用 a 替换中间行?是否需要翻转?

谢谢。

可以用点号修改-

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

可以在此处查看文档:

如果你想就地更新矩阵,你可以使用

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]

使其更通用一些,您可以在其中定义操作、行和列

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