我在matlab.I 1028 18矩阵要计算第一和第二行通过在Matlab列值,第三,第四等的平均值,并得到一个新的矩阵的平均值。
Answer 1:
我认为,要计算每对行的列方向的平均。 重塑阵列为2×18 *二分之一千○二十八,计算平均值(其操作列方向),和重塑的结果是2分之1028×18:
>> x = rand(1028, 18); >> result = reshape(x, 2, 1028/2*18); >> result = mean(result); >> result = reshape(result, 1028/2, 18);
快速测试以证明相比for循环在对行的向量化溶液的速度:
>> x = rand(1028, 18); >> tic; result1 = zeros(1028/2, 18); for ii = 1:1028/2; result1(ii,:) = mean(x((2*ii-1):(2*ii),:)); end; toc; Elapsed time is 0.022432 seconds. >> tic; result2 = reshape(x, 2, 1028/2*18); result2 = mean(result2); result2 = reshape(result2, 1028/2, 18); toc; Elapsed time is 0.000388 seconds.
Answer 2:
我想你在找什么是:
x = rand( 1028, 18 );
meanx = ( x(1:2:end,:) + x(2:2:end,:)) / 2;
运行在此之后, meanx
将是[514×18]矩阵。
的第一行meanx
是行中1和2的平均x
。
的第二行meanx
是行中3和4的平均x
。
的第三行meanx
是行5和6中的平均x
。
编辑 :
如果您还想要排除一些基于第一行的值的平均程序行,那么你可以添加以下内容:
dx = diff(x(:,1));
goodrows = (dx(1:2:end) == 0); %find row-pairs for which the first elements match
badrows = ~goodrows;
goodmeans = meanx(goodrows,:) %average rows with matching first element
badmeans = meanx(badrows,:) %average rows with non-matching first element
Answer 3:
建立由B3和CJH优秀的答案。 这一个是最快的
m=1028;
n=18;
D=rand(m, n);
% compute mean for two neighboring rows
D=reshape(D, 2, m/2*n);
D=(D(1,:)+D(2,:))/2;
D=reshape(D, m/2, n);
测量一个for循环迭代2000
b3 Elapsed time is 0.264215 seconds.
cjh Elapsed time is 0.134812 seconds.
my version Elapsed time is 0.087994 seconds.
很显然这是为什么。 B3采用平均的功能,如果我们只是想计算两个数字的平均值是不是表现这么好。 在另一方面,巧妙重塑确保我们没有数据的读期间活蹦乱跳的记忆,是在CJH版本的情况。 因此,结合最好的两种解决方案提供了最好的结果..
文章来源: I want to calculate the mean of two rows in matlab