Vectorize IF语句

时间:2015-10-06 02:37:28

标签: matlab vectorization

我正在尝试在Matlab中对if语句进行矢量化,我不知道该怎么做。我想为正值分配'N',为负值分配'S'。我想避免使用for循环,但这是我的代码:

LatDD = [23.0,12.3,-43.2,9.9,-40.7];
LatDir = ['' '' '' '' ''];
if (LatDD < 0)
    LatDir = 'S'
else
    LatDir = 'N'
end

显然这不能做我想要的,因为它实际上只检查LatDD的第一个元素。我可以很容易地做一个for循环,但我希望它是矢量化的。我尝试了逻辑索引,但所有得到我的是另一个带有零或者的向量,无论如何我都要检查for循环。

2 个答案:

答案 0 :(得分:5)

你可以在这里使用逻辑索引,你只需要做两次

LatDD = [23.0,12.3,-43.2,9.9,-40.7];
LatDir = ['' '' '' '' ''];

LatDir(LatDD < 0) = 'S';
LatDir(LatDD >= 0) = 'N';

由于您在此处有二元选择,因此您甚至可以通过将所有LatDir预先填充'N'并仅将与LatDD值相对应的值更改为{{1}来跳过此步骤}

'S'

答案 1 :(得分:2)

这是一个单行 -

char('S'*(LatDD<0) + 'N'*(~(LatDD<0)))

示例运行 -

>> LatDD = [23.0,12.3,-43.2,9.9,-40.7];
>> LatDir = ['' '' '' '' ''];
>> char('S'*(LatDD<0) + 'N'*(~(LatDD<0)))
ans =
NNSNS