根据应用于另一个vector的条件创buildvector

我对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); 

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

例如,对于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 

NB如果我在Excel中这样做,我会用它来创buildD(复制所有行):

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

任何帮助都将非常感激!

这很简单:

你的载体:

 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 

虽然我build议您使用@waywaywewalk的答案,但您的初始解决scheme几乎是正确的。 唯一的错误是你使用了错误的循环variablesD而不是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中,你应该避免像这样的vector循环。 通常有比使用循环语句快得多的方法。

尝试这个:

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

expression式B==1被解释为一个逻辑数组。