【问题标题】:how to do this in a for loop in Matlab如何在 Matlab 的 for 循环中执行此操作
【发布时间】:2012-10-09 12:36:34
【问题描述】:

我有一个大小为 160x170x18 的 3 维矩阵 W,我想计算差异 W内部的每个连续矩阵之间。

例如diff1 = W(:,:,1) - W(:,:,2)diff2 = W(:,:,2) - W(:,:,3)等...

接下来我要选择结果矩阵的一些特殊部分,例如:

NewDiff1 = [diff1(20:50,110:140); diff1(60:90,110:140)];

对于其他矩阵也是如此。 最后我想计算每个矩阵的平均值和误差如下:

mean1 = mean(mean(NewDiff1));
er1 = 0.1-abs(mean1);

我成功地为每个矩阵单独执行此操作,但更喜欢在 for 循环中一次完成所有操作。

【问题讨论】:

    标签: matlab loops for-loop matrix


    【解决方案1】:

    表达式

    diff1 = diff(W,1,3)
    

    在您的示例中,将返回一个160*170*17 矩阵,其中diffW(:,:,1) = W(:,:,2) - W(:,:,1),这不是您想要的。但是

    diff1 = (-1)*diff(W,1,3)
    

    确实,如果我的算术很好,会给你你想要的差异。从那里你需要类似的东西:

    newdiff1 = [diff1(20:50,110:140,:);diff1(60:90,110:140,:)];
    

    means = mean(mean(newdiff1));
    er1 = 0.1 - abs(mean1);
    

    我还没有在您正在使用的大小的矩阵上彻底测试这个,但它似乎在较小的测试上工作正常。

    【讨论】:

    • 我认为这不是问题所在。该帖子显示他们清楚地知道如何沿着正确的轴进行差异,似乎他们在说除了张量W之外,他们可能还有称为YZ等的张量,所有需要同样奇怪的差异处理;对于diff1diff2 等,看起来他们希望将结果插入到最后的一个大矩阵中。这就是为什么将它们推入一个单元阵列可能会更好。
    • 我找到了另一个解决方案:dff = diff(W,1,3); a = dff([20:50,60:90],110:140,:); meanN = mean(reshape(a,[],size(a,3))); erN = .1 - abs(meanN);
    【解决方案2】:

    将您的矩阵存储到cell array 中,然后循环遍历元胞数组的内容并对每个事物应用相同的差分逻辑。小心使用带有单元格数组的 {} 语法来获取其内容,而不是 (),后者会为您提供特定位置的单元格。

    【讨论】:

      猜你喜欢
      • 2021-11-11
      • 2015-02-12
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      相关资源
      最近更新 更多