Ich habe eine Variable distr=[0 3 1 0 2];
, und ich habe eine Variable full
die distr(i)
mal i
, für alle i
ConTrain sollte.MATLAB: schnelle Erstellung von Vektor-Indizes
In diesem Beispiel möchte ich:
full=[2 2 2 3 5 5];
weil distr(2)=3
daher 3x 2
, und so weiter.
Natürlich kann ich es in einem for
-loop:
full=zeros([1,sum(distr)]);
cc=1;
for i=1:length(distr)
curr=distr(i);
full(cc:cc+curr-1)=i*ones([1,curr]);
cc=cc+curr;
end
aber das ist sehr langsam. Kennen Sie einen schnellen Weg mit MATLABs großartigem Array-orientiertem Stil? Vielen Dank!
Sie wollen __run-Länge Decodierung__. Verwenden Sie 'repelem 'wie folgt:' result = repelem (1: numel (distr), distr); '. Oder sehen Sie die verknüpften Fragen und Antworten für andere Ansätze. –
Ah, das ist der korrekte Name, ich konnte keine Ergebnisse finden, weil ich nicht wusste, wie man diese Eigenschaft nennt. Danke, das hilft - insbesondere die Leistungstests dort! – NicoDean