标题说明了一切。我应该做这个分配:
def fit(x, y, deg):
p1, p2, ..., pn = [numpy.poly1d(numpy.polyfit(x, y, i)) for i in deg]
x
,y
numpy.array
的长度相等deg
,list
长n
,包含实数。list
不要对p1, p2, ... , pn = [i for i in deg]
中的表达感到烦恼,它也可能是len(deg)
。我所知道的是n
是for i in xrange(len(deg)):
exec("y{:s} = {:s}".format(str(i), str(numpy.poly1d(numpy.polyfit(x, y, i + 1)))(x))
。
更新
如果有人能告诉我为什么我的语法无效,我会解决我的具体问题:
deg = [1, 2, 3]
x and y
,numpy.array
是n
,长度相等,包含数字。
以下是将n
个变量分配到list
长度为n
的{{1}}个对象的一般解决方案:
for i in xrange(len(list)):
exec("variable_name{:s} = {}".format(str(i), list[i]))
提前致谢!
答案 0 :(得分:2)
您可以创建p1,p2,...,pk,...
作为locals()词典的成员:
p=[numpy.poly1d(numpy.polyfit(x, y, i)) for i in deg]
for i in deg : locals()['p'+str(i)]=p[i]
但它非常棘手,无法广泛推荐。
答案 1 :(得分:0)
听起来您想要将名称分配给列表中的每个项目,但您希望这些名称遵循数字模式。当人类程序员更容易按名称跟踪时,我们将名称赋予变量。如果我们使用数字
明确命名的变量可以使用两个项目:
letter0, letter1 = ['a', 'b']
assert letter0 == 'a'
assert letter1 == 'b'
现在您可以添加letter2
等等,但是为什么在您甚至不知道会有多少名称时会为个别项目添加名称呢?
如果为整个列表指定名称,则可以使用索引表示法[]
(如数学文本中的下标,如果这是您习惯的那样):
letters = ['a', 'b']
assert letters[0] == 'a'
assert letters[1] == 'b'
同样的结果,但现在无论有多少都可以使用。
因此,如果您保留列表,您的代码可能如下所示:
def fit(x, y, deg):
ps = [numpy.poly1d(numpy.polyfit(x, y, i)) for i in deg]
# You mentioned you wanted to use p1(x) or similar.
# You can access each "p" by index:
the_x_array_applied_to_the_first_p = p[0](x)
the_x_array_applied_to_the_next_p = p[1](x)
# You can do it over the whole list, too:
the_x_array_applied_to_each_p = [p(x) for p in ps]