Так что я должен загрузить сгибы перекрестной проверки из файла (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 наружных для петель, только внутренние один. Может кто-нибудь помочь мне, спасибо большое :)
Можно Vectorize внешние петли? Существуют ли специальные регистры внешнего контура? – Holmz
Нет, вы не можете, потому что реальный код, над которым я работаю, находится в% обработки, идет здесь, часть, которая, я считаю, не может быть легко векторизованной. –
Вам обычно нужен макет SoA, чтобы легко векторизовать, и AoS часто проще концептуально. Вы могли бы сделать вектор для этого, если вы много работаете над ним снова и снова, в противном случае он требует сборов и рассеиваний. Таким образом, в основном есть один и только один векторный регистр, и в идеале он должен работать на однородных линейных данных ... Это почти всегда внутренний цикл. Похоже, что trIDX [] пытается это сделать. И @ rahnema1 с vertcat. – Holmz