摘要本文深入讲解DolphinDB向量化计算技术。从向量化原理到向量化操作从批量计算到性能对比从内存优化到实战应用全面介绍向量化计算的核心方法。通过丰富的代码示例帮助读者掌握高性能数据处理的核心技能。一、向量化计算概述1.1 什么是向量化计算向量化计算是对整个向量数组进行批量操作向量化计算标量计算逐元素循环向量化计算批量操作优势减少循环SIMD加速内存连续1.2 向量化 vs 标量化特性标量化向量化操作方式逐元素循环批量操作性能较慢快10-100倍代码复杂简洁内存分散连续1.3 DolphinDB向量化优势优势说明原生支持内置向量化SIMD加速CPU指令优化内存优化连续内存访问简洁语法向量化表达式二、向量化操作2.1 基本运算//创建向量 a1..10b11..20//向量化加法 ab//[12,14,16,18,20,22,24,26,28,30]//向量化减法 b-a//[10,10,10,10,10,10,10,10,10,10]//向量化乘法 a*b//[11,24,39,56,75,96,119,144,171,200]//向量化除法 b \ a//[11,6,5.33,4.25,3.8,3.33,3,2.75,2.56,2.4]2.2 数学函数//向量化数学函数 x1..10//三角函数 sin(x)cos(x)tan(x)//指数对数 exp(x)log(x)log10(x)//幂运算pow(x,2)sqrt(x)//取整 floor(x)ceil(x)round(x)2.3 统计函数//向量化统计函数 datarand(20.0..30.0,1000)//基本统计sum(data)//总和 avg(data)//平均值max(data)//最大值min(data)//最小值 std(data)//标准差 var(data)//方差 med(data)//中位数 mode(data)//众数2.4 条件运算//向量化条件运算 data1..10//条件赋值 iif(data5,大,小)//[小,小,小,小,小,大,大,大,大,大]//多条件 iif(data3,小,iif(data7,中,大))//[小,小,中,中,中,中,大,大,大,大]三、向量化 vs 循环3.1 性能对比//性能对比测试//标量化循环计算defscalarSum(data){total0.0for(vindata){totalv}returntotal}//向量化直接计算defvectorSum(data){returnsum(data)}//测试数据 datarand(1000.0,1000000)//性能测试 timer scalarSum(data)//循环版本 timer vectorSum(data)//向量化版本//结果向量化快10-100倍3.2 代码对比//标量化复杂代码defscalarAdd(a,b){resultarray(DOUBLE,a.size())for(iin0..a.size()){result[i]a[i]b[i]}returnresult}//向量化简洁代码defvectorAdd(a,b){returnab}//测试 arand(1000.0,100000)brand(1000.0,100000)timer scalarAdd(a,b)timer vectorAdd(a,b)四、向量化技巧4.1 避免显式循环//不推荐显式循环defslowProcess(data){resultarray(DOUBLE,data.size())for(iin0..data.size()){result[i]data[i]*21}returnresult}//推荐向量化deffastProcess(data){returndata*21}4.2 使用内置函数//不推荐自己实现defmySum(data){total0.0for(vindata){totalv}returntotal}//推荐使用内置函数sum(data)4.3 批量操作//批量操作一次处理多列 ttable(rand(20.0..30.0,1000)astemp1,rand(20.0..30.0,1000)astemp2,rand(20.0..30.0,1000)astemp3)//向量化多列同时计算 select temp1,temp2,temp3,(temp1temp2temp3)/3asavg_temp,max(temp1,temp2,temp3)asmax_temp,min(temp1,temp2,temp3)asmin_tempfromt五、内存优化5.1 内存连续性//内存连续向量化操作更高效//DolphinDB向量存储在连续内存中//创建大向量 largeVectorrand(1000.0,10000000)//向量化操作内存连续访问 timersum(largeVector)//快//避免频繁创建小向量5.2 避免内存拷贝//避免不必要的拷贝 datarand(1000.0,1000000)//不推荐创建多个中间结果 step1data*2step2step11step3sqrt(step2)//推荐链式操作 resultsqrt(data*21)5.3 数据类型优化//选择合适的数据类型//INT vs DOUBLE//整数计算更快 intData1..1000000timersum(intData)//浮点计算稍慢 floatDatadouble(1..1000000)timersum(floatData)六、实战案例6.1 数据标准化//向量化数据标准化//创建数据 ttable(1..10000asid,rand(20.0..30.0,10000)astemperature,rand(40.0..60.0,10000)ashumidity)//向量化标准化 selectid,temperature,humidity,(temperature-avg(temperature))/std(temperature)astemp_normalized,(humidity-avg(humidity))/std(humidity)ashumid_normalizedfromt//或者使用函数defnormalize(data){return(data-avg(data))/std(data)}selectid,normalize(temperature)astemp_norm,normalize(humidity)ashumid_normfromt6.2 批量特征计算//向量化特征计算//创建时间序列数据 ttable(2024.01.01T00:00:000..99999*60000astimestamp,rand(20.0..30.0,100000)astemperature,rand(40.0..60.0,100000)ashumidity)//向量化特征计算 select timestamp,temperature,humidity,//滑动特征 mavg(temperature,10)astemp_ma10,mstd(temperature,10)astemp_std10,mmax(temperature,10)astemp_max10,mmin(temperature,10)astemp_min10,//差分特征 temperature-prev(temperature)astemp_diff,//比率特征 temperature/humidityastemp_humid_ratiofromt6.3 批量异常检测//向量化异常检测//创建数据 ttable(1..10000asid,rand(20.0..30.0,10000)astemperature)//向量化异常检测 selectid,temperature,//Z-Score异常检测abs(temperature-avg(temperature))/std(temperature)aszscore,abs(temperature-avg(temperature))3*std(temperature)asis_anomaly,//IQR异常检测 percentile(temperature,25)asq1,percentile(temperature,75)asq3,temperaturepercentile(temperature,25)-1.5*(percentile(temperature,75)-percentile(temperature,25))ortemperaturepercentile(temperature,75)1.5*(percentile(temperature,75)-percentile(temperature,25))asis_iqr_anomalyfromt七、性能基准7.1 基准测试//性能基准测试//测试数据 datarand(1000.0,10000000)//测试1求和 timersum(data)//测试2平均值 timer avg(data)//测试3标准差 timer std(data)//测试4排序 timer sort(data)//测试5向量化运算 timer data*217.2 性能对比表操作标量化(ms)向量化(ms)加速比求和100520x平均值120620x标准差2001020x加法150350x乘法150350x八、总结本文详细介绍了DolphinDB向量化计算向量化原理批量操作、SIMD加速向量化操作基本运算、数学函数、统计函数性能对比向量化 vs 标量化向量化技巧避免循环、使用内置函数内存优化内存连续、避免拷贝实战应用数据标准化、特征计算、异常检测思考题向量化为什么比标量化快如何选择向量化操作如何优化向量化性能参考资料DolphinDB向量化计算DolphinDB性能优化