如何在DolphinDB V3.00.3中按连续重复元素重塑向量?
在DolphinDB V3.00.3中实现偶数长度数值向量的元素连续重复转换
针对需求,这里提供两种DolphinDB原生、无循环的高效解决方案,均能满足输入偶数长度数值向量,输出同长度向量且前半部分元素连续重复两次的要求:
方案一:使用take + rep函数
利用rep生成重复的索引序列,再通过take从原向量中按索引取值,是性能最优的方案之一:
x = [1,2,3,4,5,6,7,8] halfLen = size(x) / 2 result = take(x, rep(1..halfLen, 2))
执行后result的值为[1,1,2,2,3,3,4,4],完全符合预期,且全程保持数值类型。
方案二:使用each + repeat + flatten函数
你之前尝试each()+repeat()得到字符串向量,大概率是未对each返回的嵌套向量做扁平化处理。正确写法如下:
x = [1,2,3,4,5,6,7,8] halfLen = size(x) / 2 result = flatten(each(repeat, x[1:halfLen], 2))
each(repeat, x[1:halfLen], 2)会生成嵌套向量[[1,1],[2,2],[3,3],[4,4]],再通过flatten将其展开为一维数值向量,即可得到目标结果。
关于你之前尝试的问题说明
each()+repeat()转字符串:若未指定元素类型或操作不当可能触发隐式转换,但上述写法中x为数值向量,each返回的嵌套向量元素仍为数值,flatten后不会变为字符串。reshape()+transpose()顺序混乱:若直接对原向量做reshape(2, halfLen)再转置,会得到按列排列的结果(如[1,3,5,7,2,4,6,8]),不符合需求;但如果仅对前半部分元素处理,就不会有这个问题。
内容的提问来源于stack exchange,提问作者Dongyun Huang
相关产品推荐
相关产品推荐

