【问题标题】:Create vector based on condition applied on another vector根据应用于另一个向量的条件创建向量
【发布时间】:2014-05-24 02:03:21
【问题描述】:

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

注意如果我在 excel 中执行此操作,我会使用它来创建 D(复制所有行):

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

非常感谢任何帮助!

【问题讨论】:

    标签: arrays excel matlab if-statement conditional


    【解决方案1】:

    虽然我建议您使用@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】:

    试试这个:

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

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

    【讨论】:

      【解决方案3】:

      就这么简单:

      你的向量:

      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
      

      【讨论】:

      • 你,我的朋友,是救命稻草!
      猜你喜欢
      • 2022-06-28
      • 1970-01-01
      • 2020-06-04
      • 2012-03-13
      • 1970-01-01
      • 2021-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多