2017-12-15 87 views
1

두 개의 목록을 입력 받아 목록을 출력하는 Python에서 함수 polyprod (a, b)를 작성하려고합니다.Python 목록을 사용하여 다항식 곱셈을 계산합니다.

목록은 해당 위치와 관련된 x의 지수의 계수에 해당하는 목록의 항목이있는 다항식입니다. 따라서 다음과 같이, 예를 들면,이리스트는 다항식을 나타내는 것이다

[1,1,1] = X + 2 + X[0,2,6] = 2 × 2 + (6X) 1.

내가 내 함수가이 같은 목록을 먹고 싶어하고, 출력 우리의 예를 들어 우리가 얻을 것이다, 그래서 제품을 나타내는 목록 :

polyprod를 ([1,1,1], [0,2, 6]) = 0,2,8,8,6], (1 + X + X 2) (2 × 2 + (6X) ) = 2 × 2 + 8X + 8X 3 + 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 '으로 좌측 0을 트림 (...,'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