Сравнение строк матрицы с векторами строк


Я запустить эту программу в течение пяти часов и она еще не завершена. Интересно, если мы можем вносить изменения, чтобы сократить время вычислений.

Я использую несколько за цикл, и это значительно увеличивает время расчета. моя цель состоит в том, чтобы сравнивать содержимое строк матрицы (4435 × 2000) с 6 векторами строк (1 × 2000). Сравнение производится по частям из 64 значений.

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


822
0
задан 10 декабря 2011 в 04:12 Источник Поделиться
Комментарии
1 ответ

В MATLAB, в отличие от C, то придется векторизовать код.
Первым шагом будет понять, как использовать найти такой:

i1=70:2000;
j1=find(D1(B(v,1),i1)==L);

и:

if j1>64             
m_A1(i,j) = all( A(i,j-63:j)==A(B(v,1),j1-63:j1) );
end

Вы также можете найти любые и все полезное. В итоге вы должны быть в состоянии устранить все для петли, а если заявления.

3
ответ дан 10 декабря 2011 в 05:12 Источник Поделиться