我有两个向量如下:
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;
答案 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 大小相同但满足条件的向量。