我试图在Python中编写一个函数polyprod(a,b),它接受两个列表的输入然后输出一个列表。
该列表是多项式,列表中的条目对应于与该位置相关联的x的幂的系数。因此,例如,这些列表将表示多项式,如下所示:
[1,1,1] = 1 + x + x 2 ,[0,2,6] = 2x + 6x 2 。
我希望我的函数能够获取任何两个这样的列表,并输出一个表示产品的列表,因此对于我们的示例,我们将得到:
polyprod([1,1,1],[0,2,6])= [0,2,8,8,6],因为(1 + x + x 2 ) (2x + 6x 2 )= 2x + 8x 2 + 8x 3 + 6x 4 。
我已经意识到Numpy中的卷积功能,并且我尝试使用以下代码模拟它的功能(没有成功)。我对Python很陌生,我意识到这可能是非常错误的。
def polyprod(a,v):
prodav = [0]*(len(a)+len(v)-1)
if len(v) > len(a):
for n in range(len(a)):
for m in range(n+1):
prodav[n] += v[m]*a[n-m]
for n in range(len(v)):
for m in range(n+1):
prodav[n] += a[m]*v[n-m]
此代码有什么问题?如何仅使用标准库获得正确的结果?
答案 0 :(得分:1)
查看代码,您可以立即看到目标列表最右侧的索引永远不会在这些循环中获得值,因为索引 n 仅迭代到任一个的长度输入列表。
添加产品的索引由输入列表中的索引总和决定:
def polyprod(a,v):
prodav = [0]*(len(a)+len(v)-1)
for n in range(len(a)):
for m in range(len(v)):
prodav[n+m] += v[m]*a[n]
return prodav
print(polyprod([1,1,1], [0,2,6])) # [0, 2, 8, 8, 6]