Цикл MATLAB через определенные целые числа и в том порядке, в котором я указываю v2

Нормальная петля

   for i=1:50

   end

но я хочу выполнить цикл через определенные целые числа в 4 разных массивах одновременно и в указанном мной порядке. Таким образом, в первом цикле Matlab возьмет первое целое число из r1, r2, c1, c2. Затем для второго цикла Matlab возьмет второе целое число из r1, r2, c1, c2.

For r1 = [1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128];
    r2 = [1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148];
    c1 = [776, 776 + 1280, 776 + 1280*2, 776 + 1280*3, 776 + 1280*3 + 994, 776 + 1280*4 + 994, 776 + 1280*5 + 994, 776 + 1280*6 + 994, 776 + 1280*7 + 994];
    c2 = [792, 792 + 1280, 792 + 1280*2, 792 + 1280*3, 792 + 1280*3 + 994, 792 + 1280*4 + 994, 792 + 1280*5 + 994, 792 + 1280*6 + 994, 792 + 1280*7 + 994];
    a1_raw = imread('T:\SST\...\pinhole_1-8_6s', 'PixelRegion', {[r1, r2], [c1, c2]});
End

Кроме того, я бы хотел, чтобы a1_raw менялся каждый раз, когда цикл зацикливается, чтобы в конце цикла у меня было 8 разных «a1_raw». Как я могу сделать это в MATLAB?


person Mr. Meeseeks    schedule 20.11.2014    source источник


Ответы (1)


использовать один индекс для всех массивов

n = numel( r1 ); %// assuming r2, c1 and c2 all have same number of elements
a1_raw = cell( 1, n ); %//pre-allocate
for ii = 1:n
    r1i = r1(ii);
    r2i = r2(ii);
    c1i = c1(ii);
    c2i = c2(ii);
    a1_raw{ii} = imread('T:\SST\...\pinhole_1-8_6s', 'PixelRegion', {[r1i, r2i], [c1i, c2i]});
end
person Shai    schedule 20.11.2014
comment
Круто, это работает! Здоровья Шай. Единственное, это a1_raw - поставив его так, как у вас, я думаю, что потеряю матрицу 17x21, которую хотел бы. Итак, в конце концов, мне нужно 8 разных переменных, каждая из которых относится к матрице 17x21. Любые идеи? - person Mr. Meeseeks; 21.11.2014
comment
О, я разобрался : dataset = imread('T:\SST\...\pinhole_1-8_6s.tif', 'PixelRegion', {[r1i, r2i], [c1i, c2i]}); eval(['a_raw' num2str(ii) '=dataset']) - person Mr. Meeseeks; 21.11.2014