![]() |
关于MATLAB向量寻址的Performace问题
我想知道,解决向量的单个元素更快的方法:
1)通过直接访问 result = a(index) 要么 2)通过矩阵乘法访问元素 a = [1 2 3 4]'; b = [0 0 1 0]; result = b*a; % Would return 3 在我看来(来自像C ++这样的“经典”编程中),由于直接访问,第一种方法必须性能更高...第二种方法将需要通过两个vector(?)进行迭代。 我要问的原因是,matlab在矩阵和向量运算上表现非常出色,也许我错过了任何方面,第二种方法更有效... [B]回答:[/B] 快速测试: function [] = fun1() a = [1 2 3 4]'; b = [0 0 1 0]; tic; for i=1:1000000 r = a(3); end toc; end 经过时间: [B]0.006秒[/B] 将a(3)更改为b*a 经过时间: [B]0.9秒[/B] 性能差异非常明显(在问这个问题之前,您应该自己完成此操作)。 其背后的原因: 无论MATLAB的计算效率如何,MATLAB仍需要将数字1乘以1,并将1乘以1并求和。没有比单次访问更快的希望了。 在您的特殊情况下,除了1以外,全0都是零,但是我认为对单个特殊情况进行优化是没有用的,而且我能想到的最佳优化仍然需要至少一次访问所有元素。 编辑: 今天看来我心情很好。 将a(3)更改为a(1)*b(1)+a(2)*b(2)+a(3)*b(3)+a(4)*b(4) 经过时间: [B]0.02秒[/B] 似乎边界检查(和/或其他任务)比访问和计算花费更多的时间。 [url=https://stackoverflow.com/questions/5349171]更多&回答...[/url] |
所有时间均为北京时间。现在的时间是 09:08。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.