我是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")
非常感谢任何帮助!
答案 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
被解释为逻辑数组。