我想计算MATLAB两行的平均值(I want to calculate the mean of t

2019-07-31 22:40发布

我在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
标签: matlab mean