在 KDB/Q 中,如何将数字限制在 -1、1 范围内?

In KDB/Q, how do I clip numbers to be in the range -1, 1?

我正在尝试做相当于 Python 的 np.clip 的 KDB Q,因此 -1 < x < 1 范围内的浮点数被 returned,而数字在外面此范围 return 分别为 -1 和 1。

函数:

clip:{[b1;b2;x] ?[null x;abs[type x][=10=]n;b1|x&b2]}

应该是你要找的功能

所以你现在只需要申请

clip[-1;1;]

到您想要的任何列表。

您可以很容易地使用嵌套的 vector conditional:

自行定义它
q)clip:{?[x<-1;-1;?[x>1;1;x]]}
q)l:(neg 2) + 10?4.0
q)l
0.4812058 1.730526 -0.9011735 -1.769899 -0.9757369 -1.075957 -1.651039 -1.590227 1.468439 0.911411
q)clip l
0.4812058 1 -0.9011735 -1 -0.9757369 -1 -1 -1 1 0.911411

这是另一个,只是为了添加到列表中

q)clip: {-1 | 1 & 0f ^ x}
q)clip -2 -1 -0.5 0 0.5 1 2 0N 0n
-1 -1 -0.5 0 0.5 1 1 0 0