KDB + / Q:numpy随机选择的实现,具有概率分布吗?

问题描述

在kdb + / q中实现numpy random choice的规范方法是什么? 具体来说,如何复制以下选择

np.random.choice(5,3,p=[0.1,0.3,0.6,0])
从而提供了概率分布。滚动,交易和置换似乎没有考虑概率分布?

谢谢。

解决方法

我认为这样做的一种怪诞方式:

q){[n;k;p]k?raze p#'til n}[5;3;1 0 3 6 0]
3 2 3

在这里,您没有给出概率列表,而是给出了代表比例的整数列表(但仍将代表概率)。

我想虽然还有一种 canonical 方式。

我认为如果您需要概率的话,这是可行的:

q){[n;k;p]k?raze ("j"$p*10 xexp max count each("."vs'string p)[;1])#'til n}[5;3;0.05 0 0.3 0.65 0]
2 3 3

再次,非常hacky。

编辑:正如user20349在评论中所说,您可以使用where的重载来执行上述操作,并减少一个参数:

q){[k;p]k?where p}[3;1 0 3 6 0]
3 0 3
q){[k;p]k?where("j"$p*10 xexp max count each("."vs'string p)[;1])}[3;0.05 0 0.3 0.65 0]
3 3 3

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...