首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >kdb矩阵函数的改进

kdb矩阵函数的改进
EN

Stack Overflow用户
提问于 2022-09-29 01:51:12
回答 2查看 154关注 0票数 4

有人使用kdb的矩阵函数吗?与其他工具相比,我发现它很慢。

对于1000乘1000个浮点矩阵上的逆矩阵函数inv,执行10次时kdb+为166,682毫秒。对于矩阵乘法,它花费了3,380毫秒,其中两个矩阵与1000乘1000的维数相同。

我还在DolphinDB上做了同样的实验,这是一个具有内置分析特性(DolphinDB )的类似的时间序列数据库。DolphinDB的inv函数大约快17倍,矩阵乘法大约快6倍。

我认为矩阵运算优化应该是一个很好的方法。是否有任何kdb专家解释其背后的原因,或者是否有任何改进的方法?

我使用了KDB+ 4.0 64位版本和DolphinDB_Linux_V2.00.7(DolphinDB社区版本:2核和8GB内存)。这两个实验都是用两个CPU核进行的。

KDB实现

代码语言:javascript
复制
// Start the server
rlwrap -r taskset -c 0,1 ./l64/q -p 5002 -s 2

// The code
ma:1000 cut (-5.0+ 1000000?10.0)
mb:1000 cut (-5.0+ 1000000?10.0)

\t do[10;inv ma]
16682

\t do[10;ma mmu mb]
3380

DolphinDB实现

代码语言:javascript
复制
// Start the server
rlwrap -r ./dolphindb -localSite localhost:5002:local5002 -localExecutors 1

// The code
ma=(-5.0+ rand(10.0,1000000))$1000:1000;
mb=(-5.0+ rand(10.0,1000000))$1000:1000;
timer(10) ma.inv();
Time elapsed: 975.349 ms

timer(10) ma**mb;
Time elapsed: 581.618 ms
EN

回答 2

Stack Overflow用户

发布于 2022-09-30 13:58:38

DolphinDB将openblas用于矩阵操作,如inv,而kdb+则不使用。

票数 3
EN

Stack Overflow用户

发布于 2022-09-30 13:36:06

除了知道kdb中的inv使用LU分解(以前它也使用Cholesky分解)之外,这里没有人知道kdb和dolphin在这些操作的掩护下正在做什么。

通常,kdb不是对矩阵操作进行优化,而是对向量操作进行优化。例子--如果您有足够多的工作线程并使用peach

代码语言:javascript
复制
q)\t do[10;ma mmu mb]
2182
q)\t do[10;mmu[;mb]peach ma]
375

如果您想在kdb中执行严肃的矩阵操作,您将加载C库来执行繁重的工作。例如,使用Q数学库(http://althenia.net/qml):

代码语言:javascript
复制
q)\t inv ma
1588
q)\t .qml.minv ma
689
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73889464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档