【发布时间】:2013-05-21 09:05:22
【问题描述】:
我有一个数组:
a = [109, 894, 566, 453, 342, 25]
以及a 的另一个子索引元胞数组,表示为:
subs = { [1,3,4], [2,5,6], [1,3], [3,4], [2,3,4], [6] };
我想避免 for 循环通过 MATLAB 计算以下总和:
for i=1:6
sums_a(i) = sum(a(subs{i}));
end
有没有像arrayfun 这样的快速方法来实现这个?谢谢。
【问题讨论】:
-
我修复了
l赋值中的大括号(注意:l是目前最糟糕的变量名)。 -
@JohnSmith 为什么要避免循环?
arrayfun/cellfun通常比循环慢。 -
哦,真的吗?有人告诉我
arrayfun会更有效率,但我不确定。 -
@JohnSmith - 请参阅 this question 讨论循环和 *-
fun以迭代数组/结构和单元格。 -
仅供参考,如果您想要速度,到目前为止所有答案都比您提供的简单
for循环慢得多(它比 @EitanT 提供的“棘手”解决方案快四倍以上)。不要be paranoid aboutforloops,尤其是没有分支的小型简单的(if语句)。十年前可能,但今天很多时候for循环将是既方便又最快的解决方案。在代码可读性方面for循环很简单。
标签: matlab vectorization matrix-indexing