Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.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 - Fatal编程技术网

Matlab 降低寻找最小距离位置的计算成本

Matlab 降低寻找最小距离位置的计算成本,matlab,Matlab,我正在使用MATLAB作为监视器的校准模型。。。 我需要找到如下的值 for a1 = 1:s1 for j = 1:s2 c=0; for i = 1:257; if ((XYZ1(a1,j,1)-r1(1,i))<0.5) rgb(a1,j,1) = a(i); c=c+1; break; end end if ((c ==0)|(rgb>255)) rgb(j,1)=255; end c=0; f

我正在使用MATLAB作为监视器的校准模型。。。 我需要找到如下的值

for a1 = 1:s1
for j = 1:s2
    c=0;
for i = 1:257;
    if ((XYZ1(a1,j,1)-r1(1,i))<0.5)
        rgb(a1,j,1) = a(i);
        c=c+1;
        break;
    end
end

if ((c ==0)|(rgb>255))
    rgb(j,1)=255;
end
c=0;
for i = 1:257;
    if ((XYZ1(a1,j,2)-r1(2,i))<0.5)
        rgb(a1,j,2) = a(i);
        c=c+1;
        break;
    end
end


if ((c ==0)|(rgb>255))
    rgb(a1,j,2)=255;
end
c=0;

for i = 1:257;
    if ((XYZ1(a1,j,3)-r1(3,i))<0.5)
        rgb(a1,j,3) = a(i);
        c=c+1;
        break;
    end
end
if ((c ==0)|(rgb>255))
    rgb(a1,j,3)=255;
    c=c+1;
end

end
a1
end
我的代码工作得很好,结果很好。。。但唯一的问题是计算成本,因为XYZ1的大小是2448x2048x3,所以这三个带if条件的循环需要花费大量时间。我需要帮助来降低计算成本。基本上,这三个环路造成了延迟

for i = 1:257;
    if ((XYZ1(a1,j,1)-r1(1,i))<0.5)
        rgb(a1,j,1) = a(i);
        c=c+1;
        break;
    end
end

if ((c ==0)|(rgb>255))
    rgb(j,1)=255;
end
c=0;
for i = 1:257;
    if ((XYZ1(a1,j,2)-r1(2,i))<0.5)
        rgb(a1,j,2) = a(i);
        c=c+1;
        break;
    end
end


if ((c ==0)|(rgb>255))
    rgb(a1,j,2)=255;
end
c=0;

for i = 1:257;
    if ((XYZ1(a1,j,3)-r1(3,i))<0.5)
        rgb(a1,j,3) = a(i);
        c=c+1;
        break;
    end
end
if ((c ==0)|(rgb>255))
    rgb(a1,j,3)=255;
    c=c+1;
end

任何建议都将受到高度赞赏

您可以使用逻辑索引或查找而不是循环。所以不是

c = 0;
for i = 1:257;
    if ((XYZ1(a1,j,1)-r1(1,i))<0.5)
        rgb(a1,j,1) = a(i);
        c=c+1;
        break;
    end
end

谢谢你这对我来说很好。。。但我有点困惑,因为我=1:257;如果XYZ1a1,j,1-r11,i>XYZ1a1,j,1-r11,i-1 rgba1,j,1=ai;c=c+1;打破那么我现在该怎么纠正呢?我真的不明白你的意思。
c   = find((XYZ1(a1,j,1)*ones(1,257) - r1(1,1:257)) > 0.5, 1, 'last');
if (~isempty(c))
    rgb(ai,j,1) = a(c-1);
else
    c = 0;
end