请帮助我理解这段代码:
x(:,i) = mean( (y(:,((i-1)*j+1):i*j)), 2 )';
我在书中找不到它。感谢。
答案 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)
如果你确切地说出了你不理解的内容会有所帮助,但这里有一些提示:
如果您有类似(r,c)的内容,则表示矩阵a,行r,列c(始终按此顺序)。换句话说,括号内应该有两个元素,用逗号分隔,第一个代表行,第二个代表行。
如果你有:单独使用逗号的一边,那就意味着“全部”。因此,如果你有一个(r,:),那么你将拥有矩阵a,行r,所有列。
如果:在逗号的一边不是唯一的,那么它将意味着“to”。因此,如果您有(r,z:y),则表示矩阵a,行r,列z到y。
平均值=平均值。 Matlab中函数的格式是M = mean(A,dim)。 A将是您取平均值(或平均值)的矩阵,M将是结果的位置。如果dim = 1,您将得到一个行向量,其中每个元素都是列的平均值。如果dim = 2(就像你的情况那样),那么你应该得到一个列向量,每个元素是一行的平均值。 小心,但是,因为在代码的末尾你有',这意味着转置。这意味着您的列向量将转换为行向量。
好的,所以你的代码:
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的前三列的平均值。