dolphindb里有没有类似np.where这个功能的函数

dolphindb里有没有类似np.where这个功能的函数,目前我实现的方法是这样的:

def np_where(condition, x, y){
    if (condition) return x else return y
}

np_where(false, 1, 2)

请问有内置的函数吗?

请先 登录 后评论

2 个回答

Jax Wu

DolphinDB中的iif函数可以实现上述的功能,具体示例如下:

iif(true, 12)
请先 登录 后评论
谭华

实现方案:


方案一:
iif(cond, trueResult, falseResult)

cond 是布尔标量、向量或矩阵。可为产生布尔标量、向量或矩阵的表达式。

trueResultfalseResult 可以是标量、与 cond 等长的向量或与 cond 维度相同的矩阵。

如果 cond[i] 为 true,它返回 trueResult(cond[i]);否则它返回 falseResult(cond[i])。 当 cond[i] 为NULL值时,返回的结果也是 NULL 值。

b = select id,
iif(flag>1,1,0)
from t

方案二:

case 语句至少包含一组 when…then… 语句,当满足 when 条件,则返回 then 结果,否则返回 else 后的表达式结果。

a = select id, 
    case when flag>1 then 1 else 0 end as flag
from t


性能对比

id = 0 1
flag = 0 1 
t = table(id, flag)
timer(10) a = select id, 
    case when flag>1 then 1 else 0 end as flag
from t

id = 0 1
flag = 0 1 
t = table(id, flag)
timer(10) b = select id, 
    iif(flag>1,1,0)
from t

实施方案 :case when then       耗时:5.849 ms

实施方案 :iif                              耗时:1.043 ms


所以,iff的性能更好

请先 登录 后评论