Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中,如何将值映射到其他比例?_Python - Fatal编程技术网

在Python中,如何将值映射到其他比例?

在Python中,如何将值映射到其他比例?,python,Python,我对编程和数学比较陌生,所以如果我问这个问题的方式不对,请原谅。基本上我有一系列的日期,比如: dateList = ['1818', '1813', '1818', '1811', '1813'] 我想最终绘制这些曲线,但是为了看起来更好,plot函数需要30到80之间的值。这意味着这个集合的最小值1811应该是30,最大值1818应该是80。是否有一种编写函数fancyMap的方法,以便: fancyMap(dateList, (30, 80)) 输出类似(此处猜测): 我知道这里涉及到

我对编程和数学比较陌生,所以如果我问这个问题的方式不对,请原谅。基本上我有一系列的日期,比如:

dateList = ['1818', '1813', '1818', '1811', '1813']
我想最终绘制这些曲线,但是为了看起来更好,plot函数需要30到80之间的值。这意味着这个集合的最小值1811应该是30,最大值1818应该是80。是否有一种编写函数fancyMap的方法,以便:

fancyMap(dateList, (30, 80))
输出类似(此处猜测):

我知道这里涉及到一些简单的数学,但我不确定它是什么

像这样的

dateList = ['1818', '1813', '1818', '1811', '1813']
print map ( lambda x: (int(x)-1811)*(50.0/7)+30, dateList )


作为对Claris答案的补充,此函数适用于不同的范围:

def fancyMap(array, low, high):
    array = [int(numeric_string) for numeric_string in array]
    minimum = min(array)
    maximum = max(array)

    diff = maximum - minimum
    diffScale = high - low

    return map ( lambda x: int((int(x)-minimum)*(float(diffScale)/diff)+low), array)

我认为输入中的最小值将映射到传递给map函数的最小界限,对吗?在您的示例中,输出集中的1811应转换为20。也许我完全误解了你的要求。20应该是30。谢谢你注意到这一点。更正。这个概念叫做“线性插值”,但我想检查一下;你的高低论点(30,80)总是积极的吗?哦,酷。是的,它们总是正的。我想建议你动态地提取最小值和最大值,计算比例因子和偏移量,而不是硬编码。你使用
int
不起作用,它是缩放到79,而不是80。现在应该可以了。它使用
diffScale/diff
进行整数除法,您也可以从uuu future\uuuu导入除法执行
,以避免整数除法。
print map ( lambda x: int((int(x)-1811)*(50.0/7)+30), dateList )
def fancyMap(array, low, high):
    array = [int(numeric_string) for numeric_string in array]
    minimum = min(array)
    maximum = max(array)

    diff = maximum - minimum
    diffScale = high - low

    return map ( lambda x: int((int(x)-minimum)*(float(diffScale)/diff)+low), array)