我不确定如何实际说出来,但基本上我想要做的是让3组数字相当于0到10的范围,所以我可以稍后再调用它。
例如,如果我有数字2,4和9,我想要它,以便2表示0,4表示为5,9表示10.这样一来,如果我写一个类似于“call for”的命令一个代表2.5“的数字,然后它给了我更多的例子:
0 = 2,2.5 = 3,5 = 4,7.5 = 6.5,10 = 9
我想要它,以便在我设置这些数字之后,我可以通过说明我想要的比例的哪一部分来调用2-9的自定义范围(就像我想要代表1.25的值)。有没有办法在Python中做这样的事情......?
PS:如果这样的问题已经存在,我很抱歉,我只是不知道这种事情是什么。
编辑:只是让你更多地了解我想要做的事情,我试图将这个东西设置为Maya(3d程序)中的脚本,我会有一组曲线。现在我编写了一个脚本,通过取3个点的平均值并将该平均值替换为中间数来平滑锯齿状曲线。但我想做的不是仅仅取平均值,而是能够输入0-10的值,因此它控制曲线平滑的程度。所以,如果我有一条曲线,我在Y上说2 6和4,而不是使中间数字3.667(三个值的平均值),我希望它是4或3.25,或者除了平均。基本上我只想要一个0-10系统来控制这个数字减少了多少。我希望这有道理.......答案 0 :(得分:1)
任何三点,你都可以define a quadratic curve that fits them。
例如,modifying code from this VB helper page,你得到
def fit(p1, p2, p3):
"""Return the quadratic function that fits the three points p1, p2, p3,
each defined as a tuple of (x,y) coordinates"""
a = ((p2[1]-p1[1])*(p1[0]-p3[0]) + (p3[1]-p1[1])*(p2[0]-p1[0])) / \
((p1[0]-p3[0])*(p2[0]**2-p1[0]**2) + (p2[0]-p1[0])*(p3[0]**2-p1[0]**2))
b = ((p2[1]-p1[1]) - a*(p2[0]**2 - p1[0]**2)) / (p2[0]-p1[0])
c = p1[1] - a*p1[0]**2 - b*p1[0]
return lambda x: a*x**2 + b*x + c
将为您提供一个可以使用的函数(在Python 3中),如下所示:
>>> f = fit((0,2), (5,4), (10,9))
>>> f(2)
2.44
>>> f(100)
612.0
>>> f(4)
3.36
>>> f(5)
4.0
>>> f(9)
7.760000000000001
在Python 2中,您需要使用浮动显式调用它:
>>> f = fit((0.0,2.0), (5.0,4.0), (10.0,9.0))
答案 1 :(得分:0)
您可以使用字典来存储数据对,例如
x = {0:2, 2.5:3, 5:4, 7.5:6.5, 10:9}
然后只需使用字典的键即可获得所需的值。
>>> x[0]
2
答案 2 :(得分:0)
您可以使用此功能生成"范围"你需要的点数:
def range_(lst, size):
i = 0.0
while i < size:
i += size/float(len(size))
yield i
然后你可以用这样的原始列表压缩这个函数的结果:
def range_(lst, size):
i = 0.0
while i <= size:
yield i
i += size/float(len(lst)-1)
vals = [2,3,4,6]
res = dict(zip(range_(vals,10),vals))
print res
这给出了:
{0.0: 2, 3.3333333333333335: 3, 10.0: 6, 6.666666666666667: 4}
答案 3 :(得分:0)
试试这个:
from random import random
from math import ceil
def get_number(num):
return ceil(random() * 10 * num)/10
def return_set():
my_set = []
add_up_to_me = 10.0
for i in range(0,2):
num = get_number(add_up_to_me)
add_up_to_me -= num
my_set.append(num)
my_set.append((add_up_to_me * 10)/10)
return my_set
correlate = {}
for i,j in zip(return_set(),return_set()):
correlate[i] = j
print correlate