matlab中的快速稀疏矩阵索引

时间:2014-10-30 22:18:37

标签: matlab signal-processing sparse-matrix

之前我有一个question,但它没有这个完整!实际上,我的意思是我有一个嵌套的if-for循环,我之前没有说清楚。

所以,我有一个非常长的代码,其中包含以下内容"如果" s和matlab编辑器给我一个建议如下:

这种稀疏索引表达式可能很慢

有什么办法可以让我更快地编写代码并提出matlab的建议吗? (代码可能无法运行,因为我选择了几行并尝试显示问题)

在我之前的问题中,我没有解释我需要使用i,j作为索引,所以答案并不令人信服。但是,正如你在这里看到的,我需要使用i和j作为索引,这使得问题与前一篇文章略有不同。

template = rand(200,200);
grid = rand(200,200);
T = size(template);
rws = size(grid,1);
cols = size(grid,2);
ind = "it is a matrix";

A = sparse(rws*cols,rws*cols);
T = sparse(rws*cols,2);

border_grid = 0;
border_template = 0;

template_comp = 0;
grid_comp = 0;


for i = 1:cols 
    for j = 1:rws 

        if(ind(j,i)==255)
           Asr=grid(j,i,1);
           Bsr=template(((j-posy)+1),((i-posx)+1),1); 
           Snorm= ((Asr-Bsr)^2)^(1/2);
            if (( (j+1) > 0) && ((j+1) <= rws))
                if ( ind(j+1,i)==0)
                    T((i-1)*rws+j,1)=100000; 
                    border_grid=border_grid+1;
                end

                if ( ind(j+1,i)==128)
                    border_template=border_template+1;
                    T((i-1)*rws+j,2)=100000; 
                end

                if( (ind(j+1,i)==255))
                    Atr=grid(j+1,i,1);
                    Btr=template(((j+1)-posy)+1,(i-posx)+1,1);
                    Tnorm= ((Atr-Btr)^2)^(1/2);
                    A((i-1)*rws+j,(i-1)*rws+(j+1))=Snorm+Tnorm;
                end
            end
        end;

        **+ some other similar if-loops**
    end
end

0 个答案:

没有答案