Octave在某些情况下替换向量中的元素

Lin*_*gxB 2 matlab octave

我有两个向量如下:

p = zeros(5,1);
hx = [0.1; 0.3; 0.7; 0.9; 0.2];
Run Code Online (Sandbox Code Playgroud)

任务是将pfrom 0中的1元素替换为if中的元素hx >=0.5.成果输出:

p =

   0
   0
   1
   1
   0
Run Code Online (Sandbox Code Playgroud)

它可以通过下面的代码来实现,我不明白的是:作为pos = find(hx >= 0.5);2D矢量,如何理解p(pos,1)=1;?最后一行代码如何知道哪个索引p对应于正确的元素pos?这两者之间似乎没有明显的联系.另一方面,如何通过for循环和if语句来完成?

pos = find(hx >= 0.5);  
p(pos,1)=1; 
Run Code Online (Sandbox Code Playgroud)

Jon*_*nas 5

find返回括号中的条件为真的(线性)索引列表.在你的情况下,这将是[3;4],因为在元素3和4中满足条件.

第二行将元素设置为由行指示,第pos1列为1.

你可以做一个循环

for idx = 1:length(hx);
    if hx(idx) >=0.5
       p(idx,1) = 1;
    end
end
Run Code Online (Sandbox Code Playgroud)

但这将非常非Matlab/Octave.会好得多

p(hx>=0.5) = 1;
Run Code Online (Sandbox Code Playgroud)

这避免了绕道而行 find