【问题标题】:List in the range of values scaled according to another list根据另一个列表缩放的值范围内的列表
【发布时间】:2021-07-14 22:10:05
【问题描述】:

我有一个清单 - x= [27, 28, 29, 28, 31, 32, 29, 30, 35, 36, 33, 37, 39] 和一个范围 - (0,2000) 如何根据列表创建一个具有此范围内的值的新列表?比如 27 将是 0,而 39 将是 2000。

【问题讨论】:

    标签: python python-3.x list numpy


    【解决方案1】:
    x = [27, 28, 29, 28, 31, 32, 29, 30, 35, 36, 33, 37, 39]
    r = (0, 2000)
    
    lower = min(x)
    upper = max(x)
    
    print ([(i - lower) * ((r[1] - r[0]) / (upper - lower)) + r[0] for i in x])
    

    如果您想要整数值而不是浮点数,请在列表推导中插入 int()round()

    编辑:我更改了代码以提供更通用的解决方案,该解决方案也适用于 (0, 2000) 之外的其他范围。

    【讨论】:

      【解决方案2】:

      你标记了 numpy,所以这里有一个使用它的答案:

      >>> import numpy as np
      >>> x = np.array([27, 28, 29, 28, 31, 32, 29, 30, 35, 36, 33, 37, 39])
      >>> 2000 * (x - x.min()) / (x.max() - x.min())
      array([   0.        ,  166.66666667,  333.33333333,  166.66666667,
              666.66666667,  833.33333333,  333.33333333,  500.        ,
             1333.33333333, 1500.        , 1000.        , 1666.66666667,
             2000.        ])
      

      【讨论】:

      • 如果我有像 [[27, 28, 29, 28],[28,30,32,29],[31,32,28,33]] 这样的 numpy 数组,希望保留相同的结构,但值在该范围内
      • @Prak 上面的代码也适用于该输入。试试看!
      • 这个怎么样? np.interp(x, (x.min(), x.max()), (0, 2000))
      • @Prak 这是正确的答案。很好的发现!
      【解决方案3】:

      这是一种解决方案:

      >>> x = [27, 28, 29, 28, 31, 32, 29, 30, 35, 36, 33, 37, 39]
      >>> y = [i* 2000/(len(x)-1) for i in range(len(x))]
      >>> print(y)
      >>> [0.0, 166.66666666666666, 333.3333333333333, 500.0, 666.6666666666666, 833.3333333333334, 1000.0, 1166.6666666666667, 1333.3333333333333, 1500.0, 1666.6666666666667, 1833.3333333333333, 2000.0]
      

      【讨论】:

        【解决方案4】:

        您可以使用list comprehensionminlen

        >>[(i-min(x))*2000/(len(x)-1) for i in x]
        [0.0, 166.66666666666666, 333.3333333333333, 166.66666666666666, 666.6666666666666, 833.3333333333334, 333.3333333333333, 500.0, 1333.3333333333333, 1500.0, 1000.0, 1666.6666666666667, 2000.0]
        

        【讨论】:

          猜你喜欢
          • 2014-03-14
          • 1970-01-01
          • 1970-01-01
          • 2020-09-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多