37

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の方法で書く方法は?

ありがとう!

4

11 に答える 11

72

Python 3.5 には@ドット積の明示的な演算子があるため、次のように記述できます。

a = A @ B

それ以外の

a = numpy.dot(A,B)
于 2016-09-23T14:00:46.463 に答える
40
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))] )
于 2011-05-07T06:37:56.873 に答える
29

私のお気に入りの 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)])
于 2015-01-10T17:37:12.707 に答える
4

operator と itertools モジュールの使用:

from operator import mul
from itertools import imap

sum(imap(mul, A, B))
于 2015-08-12T16:17:17.593 に答える
1

おそらく、この種のものの最もPython的な方法は、numpyを使用することです。;-)

于 2011-05-07T06:36:47.307 に答える
0

ただし、これは繰り返される解決策になる可能性があります。

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

プレーンでPython

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

または使用numpyuser57368の回答で説明されているように):

import numpy as np
>>> np.dot(np.array(u)[:,0], v)
31
于 2016-07-31T06:33:08.597 に答える