我在矩阵中计算时出现问题。这个问题与计算速度有关。
我有一个二进制图像矩阵(f),我在matlab中找到了bwlabel的连通分量。 [L num] = bwlabel(f);
在基于某些属性后,我发现了一个向量p,它包含了我需要删除的一些L值。这是我的代码和解释
function [f,L] = clear_nontext(f,L,nontext)
% p is a vector include a lot of value we need to remove
p=find(nontext(:)~=0);
% example p= [1 2 9 10 100...] that mean we need to find in L matrix where get the value =1,2,9,10,100..] and remove it
[a b]=size(L);
g=zeros(a,b);
for u=1:length(p)
for i=1:a
for j=1:b
if L(i,j)==p(u)
g(i,j)=1;
%L(i,j)=500000;
f(i,j)=0;
end
end
end
end
end
当我使用这种方式时,程序运行但速度很慢,因为有一个p值我们需要再次检查矩阵f(或L)中的所有值。所以我需要另一种方法来更快地运行它。你能帮帮我吗?
非常感谢
答案 0 :(得分:3)
通常,MATLAB执行矩阵运算(或索引运算)然后循环 您可以尝试以下方法:
g(ismember(L,p)) = 1;
f(ismember(L,p)) = 1;
编辑:
我很好奇所以我做了一点测试:
L = round(20*randn(10000,10000));
f = L;
p = 1:5;
[a b]=size(L);
g=zeros(a,b);
tic;
for u=1:length(p)
for i=1:a
for j=1:b
if L(i,j)==p(u)
g(i,j)=1;
f(i,j)=0;
end
end
end
end
toc
我得到了:
Elapsed time is 38.960842 seconds.
当我尝试以下操作时:
tic;
g(ismember(L,p)) = 1;
f(ismember(L,p)) = 0;
toc
我得到了
Elapsed time is 5.735137 seconds.