2016-07-03 3 views
0

特定の状況下で、ベクトルの要素を交換:Octaveは私は以下のように二つのベクトルを有する

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

タスクが10からpで要素を交換する場合hx>=0.5の要素。 Expeted出力:

p = 

    0 
    0 
    1 
    1 
    0 

それはコードの下で達成することができ、私は理解していないことである:pos = find(hx >= 0.5);は、2Dベクトルを与えるとして、p(pos,1)=1;を理解するためにどのように?この最後のコード行は、posの右側の要素に対応するpのインデックスをどのように知ることができますか?これらの2つの間に明確なつながりはないようです。 一方、これはforループとif文によってどのように実行できますか?

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

答えて

4

括弧内の条件が真である(線形)インデックスのリストを返します。条件は二行目は、あなたがループを行うことができます。1.

pos、列1で示された行に要素を設定要素3と4

に満足しているので、あなたのケースでは、これは、[3;4]だろう

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

しかし、これは非常に不安定なMatlab/Octaveです。非常に良くfind

経由で迂回を回避

p(hx>=0.5) = 1; 

だろう

関連する問題