【问题标题】:Normalize numpy signal (3 dimension array), by axis=2, between -1 to 1标准化 numpy 信号(3 维数组),按轴 = 2,在 -1 到 1 之间
【发布时间】:2020-12-25 16:37:05
【问题描述】:

我有一个 NumPy 数组 [shape: (100, 11, 1000)],我想按轴 = 2 归一化为 -1 到 1 之间的值。我应该使用哪种方法来确保批量处理每个信号和通道(轴 0 和 1),其中值的范围在 -1 到 1 之间?

图 1: 数据值可以在 -20 到 20 之间,例如plt.plot(data[0,0])

图2:范围在-140到140之间,例如plt.plot(data[55,3])

更新: MinMaxScaler 不支持 3 维数组: Found array with dim 3. MinMaxScaler expected <= 2.

更新:应用以下代码不会产生与输入类似的信号:

X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))
norm = X_std * (max - min) + min

图 3: 对输入应用 min-max 范数代码后的输出 图 1

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    只需在以下公式中指定axis=2

    X_std = (X - X.min(axis=2)) / (X.max(axis=2) - X.min(axis=2))
    X_scaled = X_std * (max - min) + min
    

    axis=0 信号失真是绝对正常的,因为与其他样本值相比,每个点都会被归一化!

    【讨论】:

      【解决方案2】:

      您可以使用 sklearn 中的 MinMaxScaler

      from sklearn.preprocessing import MinMaxScaler
      
      # create object with feature range of -1, 1
      scaler = MinMaxScaler(feature_range=(-1, 1))
      
      # transform data
      transformed_array = scaler(your_data)
      

      如果你不想使用 sklearn,你可以自己在 numpy 中实现它。上面的公式是使用以下公式计算的:

      X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))
      X_scaled = X_std * (max - min) + min
      

      文档:https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MinMaxScaler.html

      【讨论】:

        猜你喜欢
        • 2019-08-09
        • 2018-07-07
        • 2023-03-28
        • 1970-01-01
        • 1970-01-01
        • 2023-04-03
        • 2016-11-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多