在MATLAB中创建循环以找到方法

the*_*o22 1 matlab

所以我在MATLAB中有2个矩阵.如果其中一个是100 X 2矩阵,如下所示:

[a b]
[13 19]
[21 39]
[35 45] 
Run Code Online (Sandbox Code Playgroud)

等.等.

另一个矩阵是NX 1矩阵,其值如下:

[1]
[3]
[5]
[7]
Run Code Online (Sandbox Code Playgroud)

等.等.

我要做的是找到第二个矩阵的'a'到'b'的所有元素的Mean值.

到目前为止我得到的是:(如果我的第一个矩阵被称为:MATRIX1

第二个矩阵称为:MATRIX2)

a= MATRIX1(1:1)
b= MATRIX1(1:2)
values = MATRIX2(a:b)
mean(values)
Run Code Online (Sandbox Code Playgroud)

这给了我我想要的,从a到b的值的平均值.但是如何创建循环以便我可以自动为MATRIX 1中的所有行执行此操作?

谢谢!

更新:我想出了如何获得循环,但现在我不知道如何获取所有值并使其成为100 X 1矩阵.这是我使用的代码:

c= size(MATRIX1,1);

for k= 1:c;
    a= MATRIX1(k,1);
    b= MATRIX1(k,2);
    values= MATRIX2(a:b);
    d= mean(values)
end
Run Code Online (Sandbox Code Playgroud)

有了这个,我得到100的d值.如何将这些值放入100 X 1矩阵?

gno*_*ice 7

以下是使用for循环执行此操作的方法:

nRows = size(MATRIX1,1);
meanValues = zeros(nRows,1);
for row = 1:nRows
  meanValues(row) = mean(MATRIX2(MATRIX1(row,1):MATRIX1(row,2)));
end
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用函数ARRAYFUN,如下所示:

meanValues = arrayfun(@(a,b) mean(MATRIX2(a:b)),MATRIX1(:,1),MATRIX1(:,2));
Run Code Online (Sandbox Code Playgroud)