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

在MATLAB中创建循环以查找方法,matlab,Matlab,我在MATLAB中有两个矩阵。如果其中一个是100 X 2矩阵,如下所示: [a b] [13 19] [21 39] [35 45] [1] [3] [5] [7] ect。ect 另一个矩阵是nx1矩阵,其值如下: [a b] [13 19] [21 39] [35 45] [1] [3] [5] [7] ect。ect 我要做的是找到第二个矩阵中从'a'到'b'的所有元素的平均值 到目前为止,我得到的是: (如果我的第一个矩阵被称为:MATRIX1 第二个矩阵称为:MATRIX

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

[a b]
[13 19]
[21 39]
[35 45] 
[1]
[3]
[5]
[7]
ect。ect

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

[a b]
[13 19]
[21 39]
[35 45] 
[1]
[3]
[5]
[7]
ect。ect

我要做的是找到第二个矩阵中从'a'到'b'的所有元素的平均值

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

第二个矩阵称为:MATRIX2)

这给出了我想要的,从a到b的平均值。 但是我如何创建一个循环,以便能够自动为矩阵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

通过这个,我得到100个d值。如何将这些值放入一个100 X 1的矩阵中?

以下是如何使用:

另一种方法是使用如下函数:


以下是如何使用一个:

另一种方法是使用如下函数:

你快到了

elems = 100
values = zeros(1, elems)
for row = 1:elems
  a= MATRIX1(1:1)
  b= MATRIX1(1:2)
  values(row) = MATRIX2(a:b)
end
mean(values)
你快到了

elems = 100
values = zeros(1, elems)
for row = 1:elems
  a= MATRIX1(1:1)
  b= MATRIX1(1:2)
  values(row) = MATRIX2(a:b)
end
mean(values)

只是为了澄清一下,你想让矩阵2中的第a个元素变成第b个元素,并对所有这些值取平均值吗

这应该起作用:

[r c] = size(MATRIX1);
myMeans = zeros(r,1);

for i = 1:r
   myMeans(i) = mean(MATRIX2(MATRIX1(i,1):MATRIX1(i,2)))
end

这将存储myMeans中行的所有平均值

只是为了澄清,您想要将矩阵2中的第“a”个元素转换为第“b”个元素,并对所有这些值进行平均吗

这应该起作用:

[r c] = size(MATRIX1);
myMeans = zeros(r,1);

for i = 1:r
   myMeans(i) = mean(MATRIX2(MATRIX1(i,1):MATRIX1(i,2)))
end

这将存储myMeans中所有行的平均值

看起来我已经失败了,但为了多样性,使用
cellfun
的另一个选项是:

cellfun(@(pair) mean(x(pair(1):pair(2))), num2cell(inds, 2))

看起来我已经被打败了,但为了多样化,使用
cellfun
的另一个选项是:

cellfun(@(pair) mean(x(pair(1):pair(2))), num2cell(inds, 2))

我试图创建一个包含平均值的第三个100 X 1矩阵(与矩阵1的行数相同)。我试图创建一个包含平均值的第三个100 X 1矩阵(与矩阵1的行数相同)。这通常是一个更好的方法,因为Matlab通常不会有效地处理
for
循环,对于循环,
cellfun
/
arrayfun
通常比
更低效:这通常是一种更好的方法,因为Matlab通常不会有效地处理
循环的
,但是,对于
循环,
cellfun
/
arrayfun
通常比
更低效: