【问题标题】:Normalizing vectors in MATLAB在 MATLAB 中对向量进行归一化
【发布时间】:2017-11-25 01:51:24
【问题描述】:

我有一系列向量,我想在 0 和 1 之间进行归一化。到目前为止,我已将数据重新采样到 10kHz,然后去除噪声并创建辅助信号来显示能量的变化。

我的下一个任务是规范化所述向量,为此我使用了“normc”,但我仍然无法将列值规范化在 0 和 1 之间。我该怎么做才能执行我的任务?

【问题讨论】:

  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码.没有明确问题陈述的问题对其他读者没有用处。如果normc 不起作用,请告诉我们原因

标签: matlab signal-processing


【解决方案1】:

如果我们谈论的是列向量和 L2 范数,应该这样做:

    a = a ./ repmat(sqrt(sum(a.^2)),size(a,1),1)

【讨论】:

    【解决方案2】:

    normc 只取列向量并使它们在欧几里得范数中的长度为 1。如果您尝试缩放数据以使所有单个值都介于 0 和 1 之间,那么这相当简单。

    如果您有[a,b] 范围内的数据,并且您想将其缩放到[0,1] 范围内,则需要移动a 并除以(b-a)

    调用A 列向量矩阵,其中有n 行和m 列。我认为以下应该有效:

    A_min = repmat(min(A,[],1),n,1);
    A_max = repmat(max(A,[],1),n,1);
    
    A_scaled = (A - A_min)./(A_max-A_min);
    

    如果你想沿列缩放,你会这样做:

    A_min = repmat(min(A,[],2),1,m);
    A_max = repmat(max(A,[],2),1,);
    
    A_scaled = (A - A_min)./(A_max-A_min);
    

    【讨论】:

      猜你喜欢
      • 2013-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-18
      • 2018-03-27
      • 2011-07-16
      相关资源
      最近更新 更多