Matlab求和函数从索引到索引

时间:2019-05-29 09:50:00

标签: matlab

如果有索引列表,我正在寻找一种更好的方法来计算从索引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缺乏经验,所以我的代码太长了。

有什么功能,我可以传递一个索引列表,它会执行与上面的代码相同的工作吗?

1 个答案:

答案 0 :(得分:1)

  • 使用array代替cell
  • 此外,由于您的cell_elements都是1s,因此您可以使用矩阵 ones(row, column)

指定rowcolumn,这里row is 1,列为100,这是代码

cell_elements = ones(1, 100)
  • a定义为数组a = [1, 40, 77]
  • 在Matlab中,前40个元素是索引为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)
  • 在Matlab中,后37个元素的索引从41 to 77开始 使用数组41:77a编写为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

>>