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

时间:2016-07-03 22:05:17

标签: matlab octave

我有两个向量如下:

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

如果p 0中的元素,则任务是将1中的元素从hx替换为>=0.5。成功输出:

p =

   0
   0
   1
   1
   0

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

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

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

这可以用单行代码解决。但是请确保p和hx具有相等数量的元素。

p(hx>=0.5)=1;

答案 2 :(得分:0)

我遇到了同样的问题,并使用以下代码段进行了解决:

VectorWithZeros = VectorWithZeros + ReplaceWithScalar * (VectorWithZeros == 0)

答案 3 :(得分:0)

我能找到的没有循环的最简单的解决方案是:

p = hx >= 0.5

它将输出一个与 hx 大小相同但满足条件的向量。