Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
matlab代码的高时间复杂度降低_Matlab_Optimization - Fatal编程技术网

matlab代码的高时间复杂度降低

matlab代码的高时间复杂度降低,matlab,optimization,Matlab,Optimization,我试图在matlab中运行这段代码,但它的复杂性很高 尽管如此,matlab在for循环方面还是非常慢。 请帮我优化下面的代码 for k=1:th for i=1:D-1 for j=i+1:D if(dist(j,k)>dist(i,k)) t=ClassP1(k,i); ClassP1(k,i)=ClassP1(k,j); ClassP1(k

我试图在matlab中运行这段代码,但它的复杂性很高 尽管如此,matlab在for循环方面还是非常慢。 请帮我优化下面的代码

for k=1:th
    for i=1:D-1
        for j=i+1:D
            if(dist(j,k)>dist(i,k))
                t=ClassP1(k,i);
                ClassP1(k,i)=ClassP1(k,j);
                ClassP1(k,j)=t;
            end
        end
    end
end
在哪里

尺寸(类别P1)=20x4276

尺寸(距离)=4276x20

提前非常感谢


Rinadi

您可能可以像这样删除
k
上的外部循环(未测试,因为我没有您的数据,可能需要一些调整):

我不确定这是否在可读性或速度上节省了很多


但你的目标是什么?看起来您正在做一些类似于根据矩阵
dist
(但不完全如此)对矩阵
ClassP1
排序的事情。也许有一个更好的解决方案,使用
[~,idx]=sort(dist)
然后
ClassP1(?,idx)=whatever

新版本的Matlab在循环中并不慢。所花费的时间是否有实际问题,或者只是您想改进解决方案?这不会大大提高性能,但有一个快速提示:交换两个元素:
ClassP1(k,[ii,jj])=ClassP1(k,[jj,ii])
。grantnz:我更关心for循环是否有办法不使用它们。由于Matlab是基于JAVA的,所以循环速度不是很快,有3个for循环嵌套。这让我慢了很多@罗伯特:谢谢你,我现在也要试试。Matlab不是基于java的。它只是使用java作为UI。谢谢,我还以为它是基于java的:(
for i = 1:D-1
    for j = i+1:D
        iswap = find(dist(j, 1:th) > dist(i, 1:th));
        ClassP1(iswap, [i, j]) = ClassP1(iswap, [j, i])
    end
end