2012-03-07 4 views
2

Выходной вектор должен выглядеть следующим образом:Создание вектора

a=[3 3 3 4 4 4 4 5 5 5 5 5] 

Что я имею:

pe=[1 5 9] and ne=[4 8 12] and co=[3 4 5] 

ре описывает начальный индекс и пе конечный индекс от каждой записи и совместно значение этот вход

Я хочу сделать это без цикла. с петлей он должен выглядеть следующим образом:

for i=1:3 
    a(pe(i):ne(i))=co(i) 
    end 
+1

для КОНТУРА должна быть ре (я) ... и т. д., правильно? Кроме того, как вы хотите рассматривать случай pe = [1 4 9] и ne = [6 8 12] и co = [3 4 5]? использовать последнюю ценность? –

+0

yes ..my fault sorry .. это должно быть (pe (i): ne (i)) = co (i). В другом случае я просто хочу создать с pe, ne и co вектор a из выше. Это означает: первая запись из pe является первой записью co (1) = 3 в a, а первая запись из pe является последней записью co (1)) = 3 в и т. д. –

ответ

2

Один из способов сделать это, чтобы создать массив индексов в co первых, используя cumsum

idxList = zeros(1,max(ne)); %# create an array with zeros 
idxList(pe) = 1;   %# mark the start of a new index 
idxList = cumsum(idxList); %# now, idxList has 1's where we should 
          %# place the first element of co, etc 
out = co(idxList);   %# and we're done. 
+0

СПАСИБО! это так просто, но это не пришло мне в голову! –

+0

@HakanKiyar: Добро пожаловать. Если вы нашли ответ полезным, подумайте о его принятии. – Jonas