将阶跃函数应用于值
Apply step function to values
我有以下 table:
t:([]sym:`eae`oco`khd`dga`eob`iog`edg`kio`gme`iko; val:1 0 5 1 0 0 1 7 6 3)
sym val
-------
eae 1
oco 0
khd 5
dga 1
eob 0
iog 0
edg 1
kio 7
gme 6
iko 3
我想要的是根据以下规则分配一些bucket
值:
if 0 <= val < 1, then bucket = 3
if 1 <= val < 3, then bucket = 8
if 3 <= val < 5, then bucket = 20
if 5 <= val , then bucket = 30
与对值 val
应用阶跃函数非常相似。
结果 table 应如下所示:
sym val bucket
--------------
eae 1 8
oco 0 3
khd 5 30
dga 1 8
eob 0 3
iog 0 3
edg 1 8
kio 7 30
gme 6 30
iko 3 20
当然,我不想申请if[if[...]]
,我正在寻找一个优雅的q-ist解决方案
以下作品:
update bucket: (`s#0 1 3 5!3 8 20 30)[val] from t
虽然我更喜欢@Anonymouse 的步进函数字典方法,但为了完整性,另一种方法是使用 asof join
q)aj[`val;t;([]val:0 1 3 5;bucket:3 8 20 30)]
sym val bucket
--------------
eae 1 8
oco 0 3
khd 5 30
dga 1 8
eob 0 3
iog 0 3
edg 1 8
kio 7 30
gme 6 30
iko 3 20
此功能称为 'stepped dictionary'。尽管@Anonymouse 已经涵盖了字典的使用方式,但是,还有一种稍微不同的使用方式,将其转换为阶梯式 keyed-table
;这将使使用 lj
:
更容易与任何其他 table 加入
q)t:([]sym:`eae`oco`khd`dga`eob`iog`edg`kio`gme`iko; val:1 0 5 1 0 0 1 7 6 3)
q)sd:`s#([val:0 1 3 5] bucket:3 8 20 30)
q)t lj sd
我有以下 table:
t:([]sym:`eae`oco`khd`dga`eob`iog`edg`kio`gme`iko; val:1 0 5 1 0 0 1 7 6 3)
sym val
-------
eae 1
oco 0
khd 5
dga 1
eob 0
iog 0
edg 1
kio 7
gme 6
iko 3
我想要的是根据以下规则分配一些bucket
值:
if 0 <= val < 1, then bucket = 3
if 1 <= val < 3, then bucket = 8
if 3 <= val < 5, then bucket = 20
if 5 <= val , then bucket = 30
与对值 val
应用阶跃函数非常相似。
结果 table 应如下所示:
sym val bucket
--------------
eae 1 8
oco 0 3
khd 5 30
dga 1 8
eob 0 3
iog 0 3
edg 1 8
kio 7 30
gme 6 30
iko 3 20
当然,我不想申请if[if[...]]
,我正在寻找一个优雅的q-ist解决方案
以下作品:
update bucket: (`s#0 1 3 5!3 8 20 30)[val] from t
虽然我更喜欢@Anonymouse 的步进函数字典方法,但为了完整性,另一种方法是使用 asof join
q)aj[`val;t;([]val:0 1 3 5;bucket:3 8 20 30)]
sym val bucket
--------------
eae 1 8
oco 0 3
khd 5 30
dga 1 8
eob 0 3
iog 0 3
edg 1 8
kio 7 30
gme 6 30
iko 3 20
此功能称为 'stepped dictionary'。尽管@Anonymouse 已经涵盖了字典的使用方式,但是,还有一种稍微不同的使用方式,将其转换为阶梯式 keyed-table
;这将使使用 lj
:
q)t:([]sym:`eae`oco`khd`dga`eob`iog`edg`kio`gme`iko; val:1 0 5 1 0 0 1 7 6 3)
q)sd:`s#([val:0 1 3 5] bucket:3 8 20 30)
q)t lj sd