2016-11-19 8 views
0

Так что я должен загрузить сгибы перекрестной проверки из файла (10 итераций, каждая из которых имеет 10-кратное число, поэтому в общей сложности 100, сохраненных последовательно в 1-мерном массиве). Вот файл: https://www.mediafire.com/?bvs0n0eu7gs0if4. Проблема заключается в моем коде используется для петли интенсивно, и я хотел бы vectorise его, вот мой код:Как я могу векторизовать этот кусок кода для загрузки перекрестной проверки из файла?

input_filename = 'cv_yeast.mat'; 
cv = load(input_filename); 
nfolds= 10; 
niters = 10; 

for loop =1:niters 

     for i = 1 : nfolds  
      teIdx = cv.cv{((loop-1)*nfolds + i)};   
      trIdx = [];   
      for j = 1 : nfolds 
       if j ~= i     
        trIdx = [trIdx; cv.cv{(loop - 1)*nfolds + j}]; 
       end 
      end 
      % Processing goes here 
    end 
    end 

По некоторым причинам я не хочу, чтобы vectorise 2 наружных для петель, только внутренние один. Может кто-нибудь помочь мне, спасибо большое :)

+0

Можно Vectorize внешние петли? Существуют ли специальные регистры внешнего контура? – Holmz

+0

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

+0

Вам обычно нужен макет SoA, чтобы легко векторизовать, и AoS часто проще концептуально. Вы могли бы сделать вектор для этого, если вы много работаете над ним снова и снова, в противном случае он требует сборов и рассеиваний. Таким образом, в основном есть один и только один векторный регистр, и в идеале он должен работать на однородных линейных данных ... Это почти всегда внутренний цикл. Похоже, что trIDX [] пытается это сделать. И @ rahnema1 с vertcat. – Holmz

ответ

1

Вы можете создать вектор из j с и конкатенации элементов cv по вертикали:

for loop =1:niters 
    for i = 1 : nfolds  
     teIdx = cv.cv{((loop-1)*nfolds + i)};   
     J = [1:i-1, i+1:nfolds]; 
     trIdx = vertcat(cv.cv{(loop - 1)*nfolds + J}); 
    end 
end 

 Смежные вопросы

  • Нет связанных вопросов^_^