【问题标题】:How to scale a numpy array from 0 to 1 with overshoot? [duplicate]如何使用过冲将 numpy 数组从 0 缩放到 1? [复制]
【发布时间】:2019-08-30 02:07:23
【问题描述】:

我正在尝试将 pandas 或 numpy 数组从 0 缩放到未知的最大值,并将定义的数字替换为 1。

我尝试的一个解决方案是将我想要的定义数字除以数组。

test = df['Temp'] / 33

这种方法不能从 0 开始一直扩展,我一直在试图找出一种更好的数学方法来解决这个问题。

【问题讨论】:

    标签: python pandas numpy dataframe normalize


    【解决方案1】:

    首先,将 DataFrame 转换为 numpy 数组

    import numpy as np
    T = np.array(df['Temp'])
    

    然后将其缩放到 [0, 1] 区间:

    def scale(A):
        return (A-np.min(A))/(np.max(A) - np.min(A))
    
    T_scaled = scale(T)
    

    然后将其转换为您想要的任何位置,例如到 [55..100]

    T2 = 55 + 45*T_scaled
    

    我确信这也可以在 Pandas 中完成(但我不熟悉它)。或许你可以学习 Pandas df.apply()

    【讨论】:

    • 谢谢,我一直在寻找更多的自动化方法来做到这一点,但我猜想将标准化函数转换为 0 + 1.35*scaled 的作品。我只需要不断调整直到它看起来正确。
    • 哇,我不敢相信我无法弄清楚。我只需要将 np.max() 替换为我想成为最大值的数字!
    • 谢谢!其实我不明白 0 to a unknown max value with the defined number replaced with 1 的含义。你从哪里得到未知号码?你想用数字举个例子吗?
    • 太棒了!所以未知数来自外部,而不是来自它自身的曲线。
    • 我刚刚在下面发布了答案。基本上,当我试图测量 PID 响应并计算稳定区域的性能不足时,我想将数据从 0% 缩放到 100%。
    【解决方案2】:
    scaled = (df['Temp']-df['Temp'].min()) / (33 - df['Temp'].min())
    

    只需将 33 替换为希望您的数据缩放到的数字!

    【讨论】:

      猜你喜欢
      • 2018-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-08
      相关资源
      最近更新 更多