Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
 
 
主题工具 显示模式
旧 2019-12-14, 20:13   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 矩阵乘法运行时间Python

我的矩阵M就是16384 x 81 。我想计算M * Mt (结果将为16384x16384 )。

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

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

#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()); } 在Python中 ,以下代码仅需0.9秒 18.8秒 (请参阅下面的评论)

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

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

编辑

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

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



回答:

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

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

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



更多&回答...
poster 当前离线   回复时引用此帖
 


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 20:40


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