以下MATLAB代码的含义是什么

时间:2010-06-28 13:03:29

标签: matlab

请帮助我理解这段代码:

x(:,i) = mean( (y(:,((i-1)*j+1):i*j)), 2 )';

我在书中找不到它。感谢。

3 个答案:

答案 0 :(得分:4)

使用临时变量可以使您发布的代码更具可读性:

        a       = (i-1)*j+1;
        b       = i*j;
        val     = y(:,a:b);
        x(:,i)  = mean( val, 2 )'; %# =mean( val' )

你到底究竟是什么?有关mean:'的含义,请参阅matlab帮助。

答案 1 :(得分:2)

如果你确切地说出了你不理解的内容会有所帮助,但这里有一些提示:

  1. 如果您有类似(r,c)的内容,则表示矩阵a,行r,列c(始终按此顺序)。换句话说,括号内应该有两个元素,用逗号分隔,第一个代表行,第二个代表行。

  2. 如果你有:单独使用逗号的一边,那就意味着“全部”。因此,如果你有一个(r,:),那么你将拥有矩阵a,行r,所有列。

  3. 如果:在逗号的一边不是唯一的,那么它将意味着“to”。因此,如果您有(r,z:y),则表示矩阵a,行r,列z到y。

  4. 平均值=平均值。 Matlab中函数的格式是M = mean(A,dim)。 A将是您取平均值(或平均值)的矩阵,M将是结果的位置。如果dim = 1,您将得到一个行向量,其中每个元素都是列的平均值。如果dim = 2(就像你的情况那样),那么你应该得到一个列向量,每个元素是一行的平均值。 小心,但是,因为在代码的末尾你有',这意味着转置。这意味着您的列向量将转换为行向量。

  5. 好的,所以你的代码:

    x(:,i) = mean( (y(:,((i-1)*j+1):i*j)), 2 )';
    

    从里面的位开始,即

    y(:,((i-1)*j+1):i*j)
    

    所以这就是说

    矩阵y(r,c)

    其中

    r(行)是:,即所有行

    c(列)是((i-1) j + 1):i j,即从(i-1) j + 1到i的列Ĵ

    然后您的代码将获得由此产生的矩阵,我称之为y(r,c),并将执行以下操作:

    mean( (y(r,c), 2 )
    

    所以从上面得到结果并取每行的平均值(平均值)。由于您的代码具有'之后,即您拥有:

    mean( (y(r,c), 2 )'
    

    然后它将获得列向量并转换为行向量。该行的每个元素将是y(r,c)行的平均值。

    最后:

    x(:,i) = mean( (y(r,c), 2 )';
    

    表示上述结果将放在矩阵x的第i列中。

    这不应该是x(i,:)而是吗?

答案 2 :(得分:1)

数组x的第i列是数组y的第i组j列的平均值。

例如,如果i为1且j为3,则x的第1列是y的前三列的平均值。