我想知道,解决向量的单个元素更快的方法:
1)通过直接访问
result = a(index) 要么
2)通过矩阵乘法访问元素
a = [1 2 3 4]'; b = [0 0 1 0]; result = b*a; % Would return 3 在我看来(来自像C ++这样的“经典”编程中),由于直接访问,第一种方法必须性能更高...第二种方法将需要通过两个vector(?)进行迭代。
我要问的原因是,matlab在矩阵和向量运算上表现非常出色,也许我错过了任何方面,第二种方法更有效...
回答:
快速测试:
function [] = fun1() a = [1 2 3 4]'; b = [0 0 1 0]; tic; for i=1:1000000 r = a(3); end toc; end 经过时间:
0.006秒
将a(3)更改为b*a
经过时间:
0.9秒
性能差异非常明显(在问这个问题之前,您应该自己完成此操作)。
其背后的原因:
无论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)
经过时间:
0.02秒
似乎边界检查(和/或其他任务)比访问和计算花费更多的时间。
更多&回答...