Matlab:循环问题

时间:2014-03-07 11:21:28

标签: matlab loops matrix

这是一个非常简单的问题,但我一直在努力。 sortedd和sortedfinal_d是8 x 1000矩阵,我使用下面的循环来检查sortedfinal_d中的任何元素是否位于两个连续的sortedd元素之间。我在每排都这样做。 overall_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

编辑:添加了输入数据,如下所示: 已排序(前四列)=

   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   

sortedfinal_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

非常感谢

2 个答案:

答案 0 :(得分:3)

您是否必须使用循环来完成此任务?

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),我们就可以更轻松地帮助您排查问题

答案 1 :(得分:1)

如果我将矩阵设置为随机数,则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