2016-07-03 14 views
0

I wie unten zwei Vektoren haben:Octave Elemente in einem Vektor unter Umständen ersetzen

p = zeros(5,1); 
hx = [0.1; 0.3; 0.7; 0.9; 0.2]; 

die Aufgabe ist Elemente in p aus 0 zu 1 wenn Elemente in hx>=0.5 zu ersetzen. Expeted Ausgabe:

p = 

    0 
    0 
    1 
    1 
    0 

Es kann von unten Code erreicht werden, was ich nicht verstehe, ist: wie pos = find(hx >= 0.5); ein 2D-Vektor gibt, wie p(pos,1)=1; zu verstehen? Wie könnte diese letzte Codezeile wissen, welcher Index von dem richtigen Element in pos entspricht? Es scheint keine offensichtliche Verbindung zwischen diesen beiden zu geben. Auf der anderen Seite, wie könnte dies durch for-Schleife und if-Anweisung getan werden?

pos = find(hx >= 0.5); 
p(pos,1)=1; 

Antwort

4

find gibt die Liste (linear) Indizes, wo der Zustand in den Klammern wahr ist. In Ihrem Fall wäre dies [3;4] sein, da der Zustand 3 in Elemente erfüllt ist und 4.

Die zweite Zeile enthält die Elemente mit Reihen von pos und Spalte 1 bis 1.

Sie könnten eine Schleife tun

for idx = 1:length(hx); 
    if hx(idx) >=0.5 
     p(idx,1) = 1; 
    end 
end 

aber das wäre sehr un-Matlab/Octave. Viel schöner

p(hx>=0.5) = 1; 

, die den Umweg über find

vermeidet wäre