2つのリストがあります。1つはA、もう1つはBという名前です。Aの各要素はトリプルで、Bの各要素は単なる数字です。次のように定義された結果を計算したいと思います。
結果=A[0] [0] * B [0] + A [1] [0] * B [1] + ... + A [n-1] [0] * B [n-1]
私はロジックが簡単であることを知っていますが、Pythonの方法で書く方法は?
ありがとう!
2つのリストがあります。1つはA、もう1つはBという名前です。Aの各要素はトリプルで、Bの各要素は単なる数字です。次のように定義された結果を計算したいと思います。
結果=A[0] [0] * B [0] + A [1] [0] * B [1] + ... + A [n-1] [0] * B [n-1]
私はロジックが簡単であることを知っていますが、Pythonの方法で書く方法は?
ありがとう!
Python 3.5 には@
ドット積の明示的な演算子があるため、次のように記述できます。
a = A @ B
それ以外の
a = numpy.dot(A,B)
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))] )
私のお気に入りの Pythonic ドット製品は次のとおりです。
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)])
operator と itertools モジュールの使用:
from operator import mul
from itertools import imap
sum(imap(mul, A, B))
おそらく、この種のものの最もPython的な方法は、numpyを使用することです。;-)
ただし、これは繰り返される解決策になる可能性があります。
>>> u = [(1, 2, 3), (4, 5, 6)]
>>> v = [3, 7]
プレーンでPython
:
>>> 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