【问题标题】:create a new vector in matlab based on a limit基于限制在matlab中创建一个新向量
【发布时间】:2013-09-24 10:31:08
【问题描述】:

我有以下矩阵

 aa =
  245.2708    2.6912   21.0000
  245.2778    2.3969   21.0000
  245.2847    4.9097   21.0000
  245.2917    5.5113   21.0000
  245.2986    6.9260   21.0000
  245.3056   20.5392   21.0000
  245.3403   40.6676   21.0000
  245.3472   28.8638   21.0000
  245.3542   45.3048   21.0000
  245.3611   47.9512   21.0000
  245.3681   NaN       NaN
  245.3889   15.3675   21.0000
  245.3958   15.0250   21.0000

 Time =aa(:,1);
 x    =aa(:,2);
 y    =aa(:,3);

现在我需要创建一个新向量“z”,当“x”大于“y”时,它应该包含“x”的所有值,如果“x”小于“y”,则填充“z” ' 与 'y'。 'z' 的输出如下所示。

z =

  21
  21
  21
  21
  21
  21
  40.6676
  28.8638
  45.3048
  47.9512
  NaN
  21
  21

【问题讨论】:

    标签: matlab data-analysis


    【解决方案1】:

    z = max(x, y)

    注意NaN,因为它既不小于、也不大于也不等于任何数字。因此,例如,如果xy 没有的位置上有NaN,则将始终选择x 中的值。

    【讨论】:

    • 比我的好多了,不知道为什么没想到!
    【解决方案2】:

    如果您希望输出为NaN如果任一值为NaN,则可以使用

    z = x+y-min(x,y);
    

    【讨论】:

      【解决方案3】:
      z = zeros(size(x));
      idx_x = x>y;
      idx_y = x<y;
      z(idx_x) = x(idx_x);
      z(idx_y) = y(idx_y);
      

      请注意,这不考虑 xy 何时相等,我不确定您是否可以将数字与 NaN 进行比较。

      【讨论】:

        猜你喜欢
        • 2020-08-08
        • 1970-01-01
        • 1970-01-01
        • 2010-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多