如果有索引列表,我正在寻找一种更好的方法来计算从索引X到索引Y的所有元素的总和。
例如:
a = {1, 40, 77} % indexes
cell_elements = {1,1,1.....,1} %100 elements, each 1
我目前的想法是这样的:
counter = 1;
for k=1:length(cell_elements)
if(%Some condition) %condition is true for k=1,40 and 77
sum = sum+cell_elements(k);
result(counter) = sum;
sum=0;
counter = counter+1;
else
sum = sum+cell_elements(k);
end
end
我想改进代码,因为我觉得问题很简单,但是由于我对matlab缺乏经验,所以我的代码太长了。
有什么功能,我可以传递一个索引列表,它会执行与上面的代码相同的工作吗?
答案 0 :(得分:1)
array
代替cell
cell_elements
都是1s
,因此您可以使用矩阵
ones(row, column)
指定row
和column
,这里row is 1
,列为100
,这是代码
cell_elements = ones(1, 100)
a
定义为数组a = [1, 40, 77]
1 to 40
的元素
这等效于1:40
,以便包含数组a
,
自a(1) = 1 and a(2) = 40
起;将1:40
设置为a(1):a(2)
前40个元素将是First_40_elements = cell_elements(a(1):a(2));
使用以下内置函数sum
将它们汇总在一起
Sum_First_40_elements = sum(First_40_elements)
41 to 77
开始
使用数组41:77
,a
编写为a(2)+1:a(3)
,Second_37_elements = cell_elements(a(2)+1:a(3));
Sum_Second_37_elements = cell_elements(Second_37_elements);
cell_elements = ones(1,100);
a = [1,40,77];
First_40_elements = cell_elements(a(1):a(2));
Sum_First_40_elements = sum(First_40_elements);
% 40
Second_37_elements = cell_elements(a(2)+1:a(3));
Sum_Second_37_elements = sum(Second_37_elements);
% 37
cell_elements = ones(1,100);
a = [1,25,40, 67, 80, 95];
element_sum = zeros(1, length(a)-1);
for i = 1:length(a)-1
if i == 1
element_sum(i) = sum(cell_elements(a(i):a(i+1)));
else
element_sum(i) = sum(cell_elements(a(i)+1:a(i+1)));
end
end
>> element_sum
element_sum =
25 15 27 13 15
>>