복붙노트

[PYTHON] 내적을 계산하는 파이썬적인 방법은 무엇입니까?

PYTHON

내적을 계산하는 파이썬적인 방법은 무엇입니까?

나는 두 개의 목록을 가지고 있는데, 하나는 A로 명명되고, 다른 하나는 B로 명명됩니다. A의 각 요소는 트리플이며 B의 각 요소는 숫자입니다. 나는 다음과 같이 정의 된 결과를 계산하고 싶다.

B [1] + ... + A [n-1] [0] * B [n-1] * B [0]

나는 논리가 쉽지만 pythonic 방식으로 쓰는 방법을 알고 있습니까?

감사!

해결법

  1. ==============================

    1.

    import numpy
    result = numpy.dot( numpy.array(A)[:,0], B)
    

    http://docs.scipy.org/doc/numpy/reference/

    너가 numpy없이 그것을하고 싶으면, 시험 하십시요

    sum( [a[i][0]*b[i] for i in range(len(b))] )
    
  2. ==============================

    2.파이썬 3.5는 내적 (dot product)에 대해 명시적인 연산자 @ 그래서 당신은 쓸 수 있습니다.

    파이썬 3.5는 내적 (dot product)에 대해 명시적인 연산자 @ 그래서 당신은 쓸 수 있습니다.

    a = A @ B
    

    대신에

    a = numpy.dot(A,B)
    
  3. ==============================

    3.내가 좋아하는 Pythonic dot 제품은 다음과 같습니다.

    내가 좋아하는 Pythonic dot 제품은 다음과 같습니다.

    sum([i*j for (i, j) in zip(list1, list2)])
    

    그래서 우리는 다음과 같이 할 수 있습니다.

    sum([i*j for (i, j) in zip([K[0] for K in A], B)])
    
  4. ==============================

    4.

    from operator import mul
    
    sum(map(mul, A, B))
    
  5. ==============================

    5.운영자 및 itertools 모듈 사용 :

    운영자 및 itertools 모듈 사용 :

    from operator import mul
    from itertools import imap
    
    sum(imap(mul, A, B))
    
  6. ==============================

    6.아마도 이런 종류의 일에 가장 Pythonic 한 방법은 numpy를 사용하는 것입니다. ;-)

    아마도 이런 종류의 일에 가장 Pythonic 한 방법은 numpy를 사용하는 것입니다. ;-)

  7. ==============================

    7.

    >>> X = [2,3,5,7,11]
    >>> Y = [13,17,19,23,29]
    >>> dot = lambda X, Y: sum(map(lambda x, y: x * y, X, Y))
    >>> dot(X, Y)
    652
    

    그리고 그게 다야.

  8. ==============================

    8.그러나 반복되는 해결책 일 수 있습니다.

    그러나 반복되는 해결책 일 수 있습니다.

    >>> u = [(1, 2, 3), (4, 5, 6)]
    >>> v = [3, 7]
    

    평범한 파이썬에서는 :

    >>> sum([x*y for (x, *x2), y in zip(u,v)])
    31
    

    또는 numpy를 사용합니다 (user57368의 대답에 설명되어 있음).

    import numpy as np
    >>> np.dot(np.array(u)[:,0], v)
    31
    
  9. ==============================

    9.위의 모든 대답은 정확하지만 제 의견으로는 내적을 계산하는 가장 비범 한 방법은 다음과 같습니다.

    위의 모든 대답은 정확하지만 제 의견으로는 내적을 계산하는 가장 비범 한 방법은 다음과 같습니다.

    >>> a=[1,2,3]
    >>> b=[4,5,6]
    >>> sum(map(lambda pair:pair[0]*pair[1],zip(a,b)))
    32
    
  10. ==============================

    10.dotproduct itertools recipe를 구현하는 타사 라이브러리 more_itertools 사용 :

    dotproduct itertools recipe를 구현하는 타사 라이브러리 more_itertools 사용 :

    import more_itertools as mit
    
    
    a = [1, 2, 3]
    b = [7, 8, 9]
    
    mit.dotproduct(a, b)
    # 50
    
  11. from https://stackoverflow.com/questions/5919530/what-is-the-pythonic-way-to-calculate-dot-product by cc-by-sa and MIT license