2017-06-16 17 views
0

Ich habe diesen Vektor:Erstellen Zufallswerte in Vektor Matlab

Population = [3, 5, 0, 2, 0, 5, 10, 50, 0, 1];

Und ich muss diesen Vektor mit einem zufälligen Wert zwischen 1 und 4 nur ausfüllen, wo 0 Wert im Vektor haben.

Wie kann ich es tun?

Edit: gibt es eine Möglichkeit, es mit Randperm-Funktion zu tun?

+0

Bitte nehmen Sie sich einen Blick auf: [? Was soll ich tun, wenn jemand meine Frage beantwortet] (https://stackoverflow.com/help/someone-answers) – randomir

Antwort

0

Zuerst Null-Elemente finden, dann Zufallswerte erzeugen, ersetzen dann die Elemente:

Population = [3, 5, 0, 2, 0, 5, 10, 50, 0, 1]; 
idx = find(Population==0); 
Population(idx) = 3 * rand(size(idx)) + 1; 

Wenn Sie ganze Zahlen müssen (nicht angeben), nur um die erzeugten Zufallszahlen in der letzten Anweisung, wie dies round(3*rand(size(idx))+1); oder verwenden Sie randi (wie in der Antwort von @OmG vorgeschlagen): randi([1,4], size(idx)).

+0

Hallo! Find (population == 0) liefert ein Array mit dem Index der Werte? –

+0

@Jokesme, Ja, in Ihrem Beispiel gibt es einen Vektor zurück: '' [3, 5, 9] ''. – randomir

0

Sie können den folgenden Code verwenden:

ind = find(~Population); % find zero places 
Population(ind) = randi(4,1,length(ind)); % replace them with a random integer