根据应用于另一个向量的条件创建向量

时间:2014-04-10 11:29:45

标签: arrays excel matlab if-statement conditional

我是Matlab的新手。这似乎是一件简单的事情,我确信我缺乏经验,所以提前道歉。

基本上,我想使用两行中的信息来覆盖另一行中的数据。

我有两行数据输出,例如:

B = [1 2 3 4 1 2 3 4]
C = [0 1 1 0 0 0 1 0]

然后我设置新的行D和E,它们将用于基于新规则的输出:

D=nan(1,8);
E=nan(1,8);

我想覆盖与B的值相对应的D / E单元格与C:

中的单元格

例如,对于B = 1,我想得到:

D= [0 nan nan nan 0 nan nan nan]

对于B = 3我想要:

E= [nan nan 1 nan nan nan 1 nan]

我目前的尝试是这样的(但它不起作用):

for D= 1:8
if B(n) == 1;
 D(n)=C(n);
elseif B(n) == 3;
 E(n)=C(n);
end
end

N.B如果我在excel中这样做,我会用它来创建D(复制所有行):

D1=IF(B1=1,C1,"nan")

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:5)

就这么简单:

你的载体:

B = [1 2 3 4 1 2 3 4]
C = [0 1 1 0 0 0 1 0]
D = NaN(1,8)
E = NaN(1,8)

然后申请:

D(B==1) = C(B==1)
E(B==3) = C(B==3)

你得到:

D =    0   NaN   NaN   NaN     0   NaN   NaN   NaN


E =  NaN   NaN     1   NaN   NaN   NaN     1   NaN

答案 1 :(得分:2)

虽然我建议您使用@thewaywewalk的答案,但您的初始解决方案几乎是正确的。唯一的错误是您使用了错误的循环变量D而不是n。所以这很好用:

B = [1 2 3 4 1 2 3 4];
C = [0 1 1 0 0 0 1 0];

D = nan(1,8);
E = nan(1,8);

for n = 1:8
    if B(n) == 1
        D(n) = C(n);
    elseif B(n) == 3
        E(n) = C(n);
    end
end

一般来说,在Matlab中你应该避免循环遍历这样的向量。通常有一些方法比使用循环语句快得多。

答案 2 :(得分:0)

试试这个:

D = nan(size(B));
enter code here
D(B==1) = 0;
E(B==3) = 1;

表达式B==1被解释为逻辑数组。