什么';s是以下numpy代码的KDB等价物

什么';s是以下numpy代码的KDB等价物,kdb,Kdb,我正在尝试获取更多的Q,所以我对Q中实现以下目标的最佳方法感到好奇 在[18]中:a=np.arange(12).重塑(3,4) [19]中:b=np.random.randint(10,size=(3,4)) In[20]:Out[20]:数组([[0,1,2,3], [ 4, 5, 6, 7], [8,9,10,11]] In[21]:b Out[21]:数组([[3,6,9,5], [4, 2, 1, 3], [6,9,3,5]] In[22]:a[a>5]=b[a>5] In[23

我正在尝试获取更多的Q,所以我对Q中实现以下目标的最佳方法感到好奇

在[18]中:a=np.arange(12).重塑(3,4)

[19]中:b=np.random.randint(10,size=(3,4))

In[20]:Out[20]:数组([[0,1,2,3], [ 4, 5, 6, 7], [8,9,10,11]]

In[21]:b Out[21]:数组([[3,6,9,5], [4, 2, 1, 3], [6,9,3,5]]

In[22]:a[a>5]=b[a>5]

In[23]:Out[23]:数组([[0,1,2,3], [4, 5, 1, 3], [6,9,3,5]]

还有什么好办法

a[np.where(cond)] = b[np.where(cond)]
谢谢

a:3 4#til 12//根据上述逻辑初始化矩阵

b:34#12?10//根据上述逻辑初始化b矩阵

@“[a;t;:;b@'t:其中每个a>5]//基于上述逻辑

a:3 4#til 12//根据上述逻辑初始化矩阵

b:34#12?10//根据上述逻辑初始化b矩阵


@'[a;t;:;b@'t:其中每个a>5]//基于上述逻辑

下面提到了用于命令的等效KDB操作

注意:请注意,这些KDB和numpy函数并不完全相同 相等的它们仅在某些输入条件下表现相似。请特别详细阅读KDB函数的行为,因为 他们超负荷工作。 我在底部为这里使用的kdb操作符提供了链接

1。a=np.arange(12)。重塑(3,4)

在KDB中具有单个输入的numpy“arange”的等价物是“til”运算符。KDB中的整形运算符为“#”

等效的KDB命令为:

 q) a:2 4 #til 12
2。b=np.random.randint(10,size=(3,4))

KDB中的“?”运算符给出随机值。它不支持大小,但可以使用shape操作符轻松实现

q) 2? 4  / output 1 3 (2 random values)
q) 3 4# 12?10
或者我们可以为其创建一个通用函数:

q) {(y;z )#?[y*z;x]} [8 ;3 ;4]
3。a[np.where(cond)]=b[np.where(cond)]

在KDB中有不同的方法来实现这一点。这取决于要使用的解决方案的列表大小。有些会表现更好 在小名单上,有些人会在大名单上表现更好。因此,根据您的项目测试这些

下面提到的所有三种解决方案都将为您提供所需的输出

q) a: 3 4#til 12;
q) b: (3 6 9 5;4 2 1 3;6 9 3 5)

q) a:(a*not i)+b*i:a>5  /solution 1
使用@和/或两者

q) a:{@[x;y;:;z]}'[a;i;b@'i: where each a > 5] / solution 2
q) a:@'[a;i;:;b@'i: where each a > 5]  /short form
或使用点(.)运算符在适当位置更改原始阵列:

 q) l:(til count a),'enlist each where@'a>5 
 q) {.[`a;x;:;y]}'[l;b ./:l]  /solution 3
 q) .'[`a;l;:;b ./:l]  short form
请在此处阅读更多详细信息:


下面介绍了命令的等效KDB操作

注意:请注意,这些KDB和numpy函数并不完全相同 相等的它们仅在某些输入条件下表现相似。请特别详细阅读KDB函数的行为,因为 他们超负荷工作。 我在底部为这里使用的kdb操作符提供了链接

1。a=np.arange(12)。重塑(3,4)

在KDB中具有单个输入的numpy“arange”的等价物是“til”运算符。KDB中的整形运算符为“#”

等效的KDB命令为:

 q) a:2 4 #til 12
2。b=np.random.randint(10,size=(3,4))

KDB中的“?”运算符给出随机值。它不支持大小,但可以使用shape操作符轻松实现

q) 2? 4  / output 1 3 (2 random values)
q) 3 4# 12?10
或者我们可以为其创建一个通用函数:

q) {(y;z )#?[y*z;x]} [8 ;3 ;4]
3。a[np.where(cond)]=b[np.where(cond)]

在KDB中有不同的方法来实现这一点。这取决于要使用的解决方案的列表大小。有些会表现更好 在小名单上,有些人会在大名单上表现更好。因此,根据您的项目测试这些

下面提到的所有三种解决方案都将为您提供所需的输出

q) a: 3 4#til 12;
q) b: (3 6 9 5;4 2 1 3;6 9 3 5)

q) a:(a*not i)+b*i:a>5  /solution 1
使用@和/或两者

q) a:{@[x;y;:;z]}'[a;i;b@'i: where each a > 5] / solution 2
q) a:@'[a;i;:;b@'i: where each a > 5]  /short form
或使用点(.)运算符在适当位置更改原始阵列:

 q) l:(til count a),'enlist each where@'a>5 
 q) {.[`a;x;:;y]}'[l;b ./:l]  /solution 3
 q) .'[`a;l;:;b ./:l]  short form
请在此处阅读更多详细信息: