【问题标题】:Replacing middle row of Matrix KDB替换 Matrix KDB 的中间行
【发布时间】: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


    【解决方案1】:

    这称为省略索引,在此页面上有详细说明: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
    

    所以二元修正是不必要的

    【讨论】:

      【解决方案2】:

      m 由三个向量组成,1 2 34 5 67 8 9。当您尝试执行替换时,您已将index at depth 指定为(1;::)。这是告诉 q 转到索引 1 处的对象并选择所有项目。

      @[m;1]
      

      您执行的替换与

      相同
      q)@[m;1;:;a]
      1 2 3
      2 5 8
      7 8 9
      

      如果您想对列执行替换,您可以使用以下索引(::;1)。这表示对于所有对象,索引到第一项。

      对于矩阵,这种类型的索引会导致选择列。

      【讨论】:

        猜你喜欢
        • 2018-04-18
        • 2021-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-12
        • 1970-01-01
        • 2015-07-23
        • 1970-01-01
        相关资源
        最近更新 更多