MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   矩阵乘法运行时间Python (https://www.labfans.com/bbs/showthread.php?t=26376)

poster 2019-12-14 20:13

矩阵乘法运行时间Python
 
我的矩阵M就是16384 x 81 。我想计算M * Mt (结果将为16384x16384 )。

我的问题是: [B]有人可以解释一下运行时间的差异[/B]吗?

[B]在C ++中[/B]使用[B]OpenCV,[/B]以下代码耗时[B]18秒[/B]

#include #include using namespace cv; int main(void) { Mat m(16384, 81, CV_32FC1); randu(m, Scalar(0), Scalar(1)); int64 tic = getTickCount(); Mat m2 = m * mt(); printf("%f", (getTickCount() - tic) / getTickFrequency()); } 在[B]Python中[/B] ,以下代码仅需[B]0.9秒[/B] [B]18.8秒[/B] (请参阅下面的评论)

import numpy as np from time import time m = np.random.rand(16384, 81) tic = time() result = np.dot(m, mT) print (time() - tic) 在[B]MATLAB中[/B] ,以下代码耗时[B]17.7秒[/B]

m = rand(16384, 81); tic; result = m * m'; toc; 我唯一的猜测是这是一个内存问题,并且Python能够以某种方式避免交换空间。但是,当我观看top时,我看不到我的C++ application使用了所有内存,并且我曾期望C++会赢得胜利。感谢您的任何见解。

[B]编辑[/B]

将示例修改为仅对操作计时的时间之后,现在使用Python的代码也需要18秒。我真的不确定发生了什么,但是如果有足够的内存,它们现在似乎都可以执行相同的操作。

如果行数是8192,请按以下时间进行:C ++:4.5秒Python:4.2秒Matlab:1.8秒



[B]回答:[/B]

您在什么CPU上运行?对于具有动态时钟的现代x86和x64芯片,不能信任getTickCount和getTickFrequency 。

18秒足够长,可以根据计时器中断从标准OS功能获得可接受的精度。

您在OpenCV中使用什么BLAS? MatLab安装了一些高度优化的软件,IIRC甚至可以检测您的CPU并适当地加载Intel或AMD的数学库。



[url=https://stackoverflow.com/questions/5051545]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 09:16

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.