获取矩阵的一列,并将其设置为kdb中的一行

获取矩阵的一列,并将其设置为kdb中的一行,kdb,q-lang,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 如何将中间一行替换为a?需要翻转一下吗 谢谢。您可以使用dot amend- 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

以矩阵为例:

1 2 3
4 5 6
7 8 9 
我想取中间的列,把它赋给一个变量,然后用它替换中间的行,给我

1 2 3
2 5 8
7 8 9 
我正在使用

a:m[;enlist1]
返回

2
5
8
如何将中间一行替换为a?需要翻转一下吗


谢谢。

您可以使用dot amend-

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
as
+

q){[ m;o;i1;i2] .[m;enlist i1;o; flip[m] i2 ] }[m;+;1;1]
1 2  3
6 10 14
7 8  9

太好了,谢谢你。我对dot amend不太熟悉。我会做一些研究。非常感谢!