【问题标题】:Adding in a for loop without Sum在没有 Sum 的情况下添加 for 循环
【发布时间】:2014-05-26 09:54:13
【问题描述】:

我想我想多了,需要一个新的观点。

我想这样做;

    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 是不实际的。

非常感谢:)

【问题讨论】:

    标签: matlab for-loop sum add


    【解决方案1】:

    试试这个:

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

    不需要循环,适用于任何“n”。

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

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

    【讨论】:

    • 当我尝试这个解决方案时,reshape 函数中会弹出一个错误,我真的不明白 (X,[1 1 3]) 和 cell2mat, 3 是如何工作的。你能解释一下吗?我也许能够看到如何改变它来工作。谢谢你的回答:)
    • 您能否提供有关您的X 变量的更多信息?
    • X 是一个 18 * 4 的单元格,每个单元格 = 1 * 100 个数组,所以当使用 cell2mat 时,它变成了一个 18*400 的矩阵...
    • 我用新的解决方案编辑了我的帖子。请看看它现在是否符合您的预期。
    • 是的!比我疯狂的重塑要快得多,谢谢你的帮助:)
    【解决方案2】:

    这行得通吗?

    SX = mean(cell2mat(X),2)
    

    还是这个?

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

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

    【讨论】:

    • 第一个与 sum 相同,使我的 18*100*4 单元格等于 18*1 数组。但是我想将它保持为 18*100 的矩阵,并平均 4 个单元格。第二种解决方案不起作用,你能解释一下它背后的逻辑吗?我也许可以改变它以适应,但我之前从未使用过 horzcat 或 [M,N]=size(X{1}) (顺便说一句,产生 M=1 和 N=100)。它会在 cell2mat 函数中导致“错误”。谢谢你的回答:)
    【解决方案3】:

    我能够使用 reshape 找到一个解决方案,与其他解决方案相比,它的编码时间要长一些,但它适用于任意数量的 n,并允许它最终保持 18*100 :)

      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 循环!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-18
      • 1970-01-01
      • 2017-03-25
      • 1970-01-01
      • 1970-01-01
      • 2020-08-10
      相关资源
      最近更新 更多