我正在尝试在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 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]
此代码中有什么问题,如何仅使用标准库获得正确的结果?
查看您的代码,您可以立即看到目标列表中最右侧的索引在这些循环中永远不会获得值,因为索引 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]