如何解决KDB / Q:多个PEACH?
我有一个带有2个参数的函数:date和sym。我想对多个日期和多个符号执行此操作。我有每个参数的列表。我目前可以使用
浏览1个列表raze function[2020.07.07;] peach symlist
我该如何做类似的事情,但还要遍历日期列表?
解决方法
您可以尝试以下操作:
- 创建输入参数对列表。
- 编写匿名函数,该函数调用您的
function
并在列表op配对参数上使用peach
例如
symlist: `A`B`C; // symlist defined for testing
function: {(x;y)}; // function defined for testing
raze {function . x} peach (2020.07.07 2020.07.08 2020.07.09) cross symlist
,
我认为这可行:
raze function'[2020.07.07 2020.07.08 2020.07.09;] peach symlist
如果没有更多要考虑的事情。您是否可以通过在其中包含每个/桃子来更改功能以接受符号列表而不是单个符号?然后您可以每个日期。
此外,您还可以创建一个与符号列表匹配的每个日期的新列表,并创建一个新函数来获取此列表,并通过分离列表中的元素来执行初始函数所做的任何事情。
q)dates
2020.08.31 2020.09.01 2020.09.02
q)sym
`llme`obpb`dhca`mhod`mgpg`jokg`kgnd`nhke`oofi`fnca`jffe`hjca`mdmc
q)func
{[date;syms]string[date],/:string peach syms}
q)func2
{[list]func[list 0;list 1]}
q)\t res1:func[;sym]each dates
220
q)\t res2:func[;sym]peach dates
102
q)
q)func2
{[list]func[list 0;list 1]}
q)dateSymList:dates,\:enlist sym
q)\t res3:func2 peach dateSymList
80
q)res3~res2
1b
q)res3~res1
1b
让我们知道这些解决方案是否有效,谢谢。
,一些可行的方法
可以将二元f投影为单数并在参数对列表上并行化
q)a:"ABC";b:til 3;f:{(x;y)}
q)\s 4
q)(f .)peach l:raze a,\:/:b
"A" 0
"B" 0
"C" 0
"A" 1
"B" 1
"C" 1
"A" 2
"B" 2
"C" 2
或者可以定义函数以接受字典参数并在表上并行化
q)f:{x`c1`c2}
q)f peach flip`c1`c2!flip l
"A" 0
"B" 0
"C" 0
"A" 1
"B" 1
"C" 1
"A" 2
"B" 2
"C" 2
Jason
,如果您有给定的函数foo,我将对其进行概括。该函数将对具有向量dt
的原子s
进行操作
q)foo:{[dt;s] dt +\: s}
q)dt:10?10
q)s:100?10
q)dt
8 1 9 5 4 6 6 1 8 5
q)s
4 9 2 7 0 1 9 2 1 8 8 1 7 2 4 5 4 2 7 8 5 6 4 1 3 3 7 8 2 1 4 2 8 0 5 8 5 2 8..
q)foo[;s] each dt
12 17 10 15 8 9 17 10 9 16 16 9 15 10 12 13 12 10 15 16 13 14 12 9 11 11 ..
5 10 3 8 1 2 10 3 2 9 9 2 8 3 5 6 5 3 8 9 6 7 5 2 4 4 ..
13 18 11 16 9 10 18 11 10 17 17 10 16 11 13 14 13 11 16 17 14 15 13 10 12 12 ..
9 14 7 12 5 6 14 7 6 13 13 6 12 7 9 10 9 7 12 13 10 11 9 6 8 8 ..
解决方案是将symList投影到有问题的函数上,然后对each
变量使用peach
(或date
)。
如果您的函数需要原子日期和符号,那么您只需创建一个新函数即可实现
q)bar:{[x;y] foo[x;] each y};
,
datelist:`date$10?10
symlist:10?`IBM`MSFT`GOOG
function:{0N!(x;y)}
{.[function;x]} each datelist cross symlist
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。