【问题标题】:Matlab: Loop issueMatlab:循环问题
【发布时间】:2014-03-07 11:21:28
【问题描述】:

这是一个非常简单的问题,但我一直在努力解决它。 sortedd 和 sortedfinal_d 是 8 x 1000 矩阵,我正在使用下面的循环来检查 sortedfinal_d 中的任何元素是否位于 sortedd 的两个连续元素之间,就数量而言。我在每一行都这样做。 general_p 也是一个 8 x 1000 矩阵,但在此过程结束时,我最终将 final_p 作为零矩阵。我不知道这是为什么。

for k=2:1000
    for s=1:1000
        for j=1:8
            if sortedd(j,k) > sortedfinal_d(j,s) && sortedfinal_d(j,s) > sortedd(j,k-1)
                final_p(j,s) = overall_p(j,k);
            end
        end
    end
end

编辑:为输入添加数据,如下所示: sortedd(前四列)=

   0.219977361620113   0.219996752039812   0.220344444223787   0.220593274018691
   0.272807483153955   0.273682693068593   0.273846498221277   0.274060049642900
   0.327201460264565   0.327375792227635   0.327572790857546   0.327856448530021
   0.380389118311424   0.380845274148177   0.380893687870765   0.381015090963159
   0.434832574575088   0.434860658844550   0.435021604722982   0.435119929919457
   0.487119089589798   0.488128501559782   0.488207451439073   0.488430455768512
   0.540652551559395   0.541303305046034   0.542195194863130   0.542234381085921
   0.595254195563241   0.595296064375604   0.595376090156252   0.595377962767971   

排序的final_d =

   0.182086792394190   0.182406508309366   0.182406508309366   0.182808976400818
   0.233058295607543   0.233058295607543   0.233158455616954   0.233158455616954
   0.286243848617693   0.286357973626582   0.286918095670684   0.287393171241241
   0.336938335090164   0.336938335090164   0.337094505106945   0.337669618738100
   0.390287818652551   0.390567879874952   0.390567879874952   0.390670502700602
   0.446995120903824   0.447270251510681   0.447452123072880   0.447597175111267
   0.501060785098551   0.501060785098551   0.501060785098551   0.501060785098551
   0.551311219045087   0.551463923687602   0.551463923687602   0.551653815175502

非常感谢

【问题讨论】:

  • 'final_p' 也是 8x1000 吗?您提到过-“如果 sortedfinal_d 中的任何元素介于 2 个 cons 之间。 sortedd 的元素,在数量级方面......。我在每一行都这样做”。在每一行中,此条件可能会满足数次或永远不会满足。我的问题 - 如果满足此条件,您将如何更改“最终”? 'final'是否应该等于overall_p中的相应元素,也就是说我们应该假设sortedfinal_d(3,4)=overall_p(3,4)还是我们必须把sortedfinal_d(3,4)=overall_p(3,y ),其中 y 是该行第一次满足的条件?

标签: matlab loops matrix


【解决方案1】:

你必须使用循环来完成这个吗?

matching_d = sortedfinal_d(:,1:end-1) < sortedd(:,2:end) ...
                  & sortedd(:,2:end) < sortedfinal_d(:,2:end);
final_p(matching_d) = overall_p(matching_d);

如果您可以向我们展示一个小样本输入(例如,sorteddsortedfinal_d 的 1x5 版本)和输出(对应的 matching_d),我们会更容易帮助解决问题。

【讨论】:

  • 请注意 && 只能对标量进行操作。该代码不会按原样编译。您可以将其更改为 &,但现在您正在执行逻辑 AND 操作,这与此处所需的操作不同。见stackoverflow.com/questions/1379415/…
  • @andrelucas:实际上,这是我所追求的逻辑AND;这应该(如果我没有完全误解这个问题)是与 OP 试图断言的等效声明。我已编辑为 &amp; - 感谢您的指点。 (我现在正在用 c++ 度过我的日子,所以“and”在我的手指中翻译成“&&”......)
【解决方案2】:

如果我将您的矩阵设置为随机数,final_p 会返回一些数字。
所以你的代码按原样工作。发布您的数据集或至少详细描述数据集,这将更容易诊断问题。

我已将 1000 减少到 10,并将迭代变量重新排序为 i、j、k 以便更容易理解:

sortedd = rand(8, 10);
sortedfinal_d = rand(8, 10);
overall_p = rand(8, 10);

for i=2:10
    for j=1:10
        for k=1:8

            if sortedd(k,i) > sortedfinal_d(k,j) && sortedfinal_d(k,j) > sortedd(k,i-1)
                final_p(k,j) = overall_p(k,i);
            end
        end
    end
end

final_p

【讨论】:

    猜你喜欢
    • 2021-02-28
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多