【发布时间】:2020-01-15 14:10:18
【问题描述】:
矩阵:
q)m:((1;2;3); (4;5;6); (7;8;9))
q)m
1 2 3
4 5 6
7 8 9
将中间列另存为
q)a:m[;1]
q)a
2 5 8
将中间的 m 行替换为 a:
q)m:.[m;(1;::);:;a]
q)m
1 2 3
2 5 8
7 8 9
谁能解释为什么m:.[m;(1;::);:;a] 用a 代替m 的中间行?
【问题讨论】:
标签: kdb
矩阵:
q)m:((1;2;3); (4;5;6); (7;8;9))
q)m
1 2 3
4 5 6
7 8 9
将中间列另存为
q)a:m[;1]
q)a
2 5 8
将中间的 m 行替换为 a:
q)m:.[m;(1;::);:;a]
q)m
1 2 3
2 5 8
7 8 9
谁能解释为什么m:.[m;(1;::);:;a] 用a 代替m 的中间行?
【问题讨论】:
标签: kdb
这称为省略索引,在此页面上有详细说明:https://code.kx.com/q4m3/1_Q_Shock_and_Awe/
所以
q)m[1;]
4 5 6
和
一样q)m . (1;::)
4 5 6
和
q).[m;(1;::)]
4 5 6
这与二元修正 (https://code.kx.com/q/ref/amend/) 结合以实现结果。
请注意,通过以下方式可以更轻松地实现它:
q)@[m;1;:;a]
1 2 3
2 5 8
7 8 9
所以二元修正是不必要的
【讨论】:
m 由三个向量组成,1 2 3、4 5 6、7 8 9。当您尝试执行替换时,您已将index at depth 指定为(1;::)。这是告诉 q 转到索引 1 处的对象并选择所有项目。
@[m;1]
您执行的替换与
相同q)@[m;1;:;a]
1 2 3
2 5 8
7 8 9
如果您想对列执行替换,您可以使用以下索引(::;1)。这表示对于所有对象,索引到第一项。
对于矩阵,这种类型的索引会导致选择列。
【讨论】: