2016-04-29 13 views
1

Ich versuche, einen linearen Vektor zu erstellen, der als Index verwendet wird. Ich muss die Zahlen 1:99 zwischen diesen Startnummern im Index x = 700, 1000, 1100, 2100, 2300, 2400, 2900 füllen. Ich habe versucht, Loops verschiedener Art zu verwenden, und ich kann nicht jede 100 Nummer speichern Sequenz in einem Array innerhalb der Schleife. Ich würde gerne lernen, wie man eine Schleife nicht benutzt und das einfacher macht.Irregular-Spaced Linear Index

Also xfinal sollte wie aussehen - 700, 701, 702 ... 799, 1000, 1001, 1002 ... 1099, 1100, 1101, 1102, ... 1199, 2100, 2101, 2102, ... 2199, 2300, 2301, 2302, ... 2399, 2400, 2401, 2402, ... 2499, 2900, 2901, 2902, ... 2999. Ich hämmere meinen Kopf auf die Tastatur - danke!

Antwort

2

wir speichern die Tastatur und beängstigend Schleifen mit bsxfun -

x = [700, 1000, 1100, 2100, 2300, 2400, 2900]; 
offset_arr = 0:99; 
xfinal = reshape(bsxfun(@plus,x,offset_arr.'),1,[]) 
+0

Ich glaube nicht, dass etwas gruseliger ist als 'bsxfun' ... – excaza

+0

@excaza Ich würde sagen, es braucht Zeit! ;) – Divakar

+0

Erstaunlich. Kannst du so freundlich sein, "@plus" zu erklären, die "1" vor den geschlossenen Klammern und die Bedeutung der geschlossenen Klammern? – user2100039

2

Eine weniger kompakt, wahrscheinlich weniger effizient, leicht unheimlicher auf die Tastatur-Version ohne eine gruselige Schleife:

x = [700, 1000, 1100, 2100, 2300, 2400, 2900]; 
intermediate = 0:99; 

tmp = repmat(intermediate, length(x), 1) + repmat(x.', 1, length(intermediate)); 
x_new = reshape(tmp.', 1, []); 
+0

Nur erschreckende vielleicht auf meine Hände, die alle tippen: D – Divakar

+0

@Divakar Ich habe eine [Tastatur für Sie sparende Version] (https://gist.github.com/sco1/e7e362946b7d7013ee095434ae308255) – excaza

+0

Ja, das ist eine Erleichterung, vor allem mit 'intermediate' wird' im'! ;) – Divakar