Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
我想知道,解决向量的单个元素更快的方法:
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秒 似乎边界检查(和/或其他任务)比访问和计算花费更多的时间。 更多&回答... |
![]() |
![]() |