在没有Sum的情况下添加for循环

时间:2014-04-12 04:48:41

标签: matlab for-loop sum add

我认为我在思考这个问题并需要一个新的观点。

我想这样做;

    SX=(cell2mat(X(:,1))+cell2mat(X(:,2))+cell2mat(X(:,3))+cell2mat(X(:,4)))/4

但是在for循环中,因为最终它会比4个不同的数据集多得多。 到目前为止,我的循环看起来像这样。

 for i=1:turns
    Sx=cell2mat(X(:,i))
       %insert a form off addition?
 end

问题是我不能使用sum,因为它是一个18 x 100的矩阵,需要保持这种状态。它在我进行顶级编码时起作用,但对于n> 50来说这是不实际的。

非常感谢:)

3 个答案:

答案 0 :(得分:0)

试试这个:

SX = mean(cell2mat(reshape(X, [1 1 3])), 3)

不需要循环,适用于任何' n'

编辑 - 基于评论信息的新解决方案:

SX = mean(cell2mat(reshape(X, [size(X,1), 1, size(X,2)])), 3)

答案 1 :(得分:0)

这会有用吗?

SX = mean(cell2mat(X),2)

还是这个?

[M,N] = size(X{1});
SX = mean(reshape(cell2mat(horzcat(X{:})),M,N,[]),3)

这实际取决于您在X中的数据设置方式。

答案 2 :(得分:0)

我能够找到使用重塑的解决方案,与其他解决方案相比,它的编码时间稍长,但它适用于任何数量的n,并允许它最终保持18 * 100:)< / p>

  xx=cell2mat(X');
  xxx=xx';
  sx=mean(xxx,2);
  SX=reshape(sx,100,18);
  Mean_X=SX'

我最终只是将其扩展为1800 * 4矩阵,偶尔转置它以获得我的1 * 100 = 100 * 1,然后找到每行n的平均值,将其重新塑造为18 * 100。并且它适用于n = 5或n = 60或n = 150。感谢其他人,我不会想到重塑它并注意for循环!