I have run this program for five hours and it has not yet completed. I wonder if we can make changes to reduce the computation time.
I use several for loop and this greatly increases the computation time. my goal is to compare the contents of the rows of a matrix (4435 ×ばつ 2000) with 6 row vectors (1 ×ばつ 2000). The comparison is made on parts of 64 values.
for i=1:4435
for j=70:2000
L = A(i,j);
j1=0;
j2=0;
j3=0;
j4=0;
j5=0;
j6=0;
for i1=70:2000
if D1(B(v,1),i1)==L
j1=i1;
Break
end
end
for i2=1:2000
if A(B(v-1,1),i2)==L
j2=i2;
Break
end
end
for i3=1:2000
if A(B(v-2,1),i3)==L
j3=i3;
Break
end
end
for i4=1:2000
if A(C(mm,1),i4)==L
j4=i4;
Break
end
end
for i5=1:2000
if A(C(mm-1,1),i5)==L
j5=i5;
Break
end
end
for i6=1:2000
if A(C(mm-2,1),i6)==L
j6=i6;
Break
end
end
if j1>64
if A(i,j-63:j)==A(B(v,1),j1-63:j1)
m_A1(i,j)=1;
else
m_A1(i,j)=0;
end
end
if j2>64
if A(i,j-63:j)==A(B(v-1,1),j2-63:j2)
m_A2(i,j)=1;
else
m_A2(i,j)=0;
end
end
if j3>64
if A(i,j-63:j)==A(B(v-2,1),j3-63:j3)
m_A3(i,j)=1;
else
m_A3(i,j)=0;
end
end
if j4>64
if A(i,j-63:j)==A(C(mm,1),j4-63:j4)
m_A4(i,j)=1;
else
m_A4(i,j)=0;
end
end
if j5>64
if A(i,j-63:j)==A(C(mm-1,1),j5-63:j5)
m_A5(i,j)=1;
else
m_A5(i,j)=0;
end
end
if j6>64
if A(i,j-63:j)==A(C(mm-2,1),j6-63:j6)
m_A6(i,j)=1;
else
m_A6(i,j)=0;
end
end
end
end
1 Answer 1
In Matlab, unlike C, you have to vectorize your code.
A first step would be to understand how to use find
like this:
i1=70:2000;
j1=find(D1(B(v,1),i1)==L);
and:
if j1>64
m_A1(i,j) = all( A(i,j-63:j)==A(B(v,1),j1-63:j1) );
end
You may also find any
and all
useful. Eventually you should be able to eliminate all the for
loops and if
statements.
-
\$\begingroup\$ thank you for your answer, but could you, please, also change the part of the program: if j1>64 if A(i,j-63:j)==A(B(v,1),j1-63:j1) m_A1(i,j)=1; else m_A1(i,j)=0; end end \$\endgroup\$user319336– user3193362011年12月10日 19:02:37 +00:00Commented Dec 10, 2011 at 19:02
-
\$\begingroup\$ Here you go. See the update. \$\endgroup\$cyborg– cyborg2011年12月10日 19:24:33 +00:00Commented Dec 10, 2011 at 19:24