2016-07-03 2 views
0

у меня есть два вектора, как показано ниже:Октав Заменить элементы вектора при определенных обстоятельствах

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

задача состоит в том, чтобы заменить элементы в p от 0 к 1, если элементы в hx>=0.5. Expeted выход:

p = 

    0 
    0 
    1 
    1 
    0 

Это может быть достигнуто ниже код, что я не понимаю: а pos = find(hx >= 0.5); дает 2D вектор, как понять p(pos,1)=1;? Как могла эта последняя строка кода узнать, какой индекс p соответствует правому элементу в pos? Между этими двумя сторонами нет очевидной связи. С другой стороны, как это можно сделать для цикла и выражения if?

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

ответ

4

find возвращает список (линейных) индексов, где условие в скобках истинно. В вашем случае, это было бы [3;4], так как условие в элементе 3 и 4.

Вторая строка устанавливает элементы с рядами указанных pos и столбца 1 к 1.

Вы можете сделать петлю

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

но это было бы очень не-Matlab/Octave. Гораздо приятнее было бы

p(hx>=0.5) = 1; 

, который позволяет избежать объезд через find

Смежные вопросы