重塑(#)不适用于动态参数

时间:2013-12-06 19:54:08

标签: kdb

要形成由相同行组成的矩阵,可以使用

x:1 2 3
2 3#x,x

按预期生成(1 2 3i;1 2 3i)。但是,试图概括这一点:

2 (count x)#x,x

虽然类型相同,但会产生type错误:

(type 3) ~ type count x

返回1b。为什么这不起作用?

2 个答案:

答案 0 :(得分:1)

以下情况应该有效。

q)(2;count x)#x,x
1 2 3
1 2 3

如果查看两个语句的解析树,可以看到第二个语句的评估方式不同。在第二个中,count的结果作为参数传递给#。

q)parse"2 3#x,x"
#
2 3
(,;`x;`x)
q)parse"2 (count x)#x,x"
2
(#;(#:;`x);(,;`x;`x))

答案 1 :(得分:1)

如果您正在寻找构建具有相同行的矩阵,那么最好使用它们  rownum#enlist x

q)x:100000?100
q)\ts do[100;v1:5 100000#x,x]
157 5767696j
q)\ts do[100;v2:5#enlist x]
0 992j
q)v1~v2
1b

我发现这更自然(而且更快!)