2017-12-15 11 views
1

私は2つのリストを入力してリストを出力する関数、polyprod(a、b)をPythonで書こうとしています。Pythonリストを使って多項式の積を計算する

リストは、その位置に関連付けられたxのべき乗の係数に対応するリスト内のエントリを持つ多項式です。以下のように、例えば、これらのリストは、多項式を表現する:

[1,1,1] = + X + X 2、[0,2,6] = 2X + 6× 1。

私たち例えば、我々はなるだろうので、私の機能は、製品を表すリストを任意の二つのようなリストを取り、出力したい:

はpolyprod([1,1,1]、[0,2、 6])= [0,2,8,8,6]、(1 + X + X )(2X + 6×)= 2X + 8X + 8X + 6X 以来4

私はNumpyのconvolve関数を知っています。以下のコードを使って、成功していないことをエミュレートしようとしました。私は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

ただ、 '' numpy.trim_zeros(...、「F」)と左のゼロをトリム'numpy.convolve'を使用してください – percusse

答えて

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] 
+0

完璧なおかげで多く!私の質問を編集してくれてありがとう、ちょうどサインアップして、指数を書く方法を理解できなかった。 :) – tsojtc

+0

あなたは歓迎です、今あなたが知っている:-) – trincot

関連する問題