1

だから私は行列をベクトルで掛けようとしています。そして、pythonはエラーを出し続けます。これが私が試しているコードです:

def matmult(m, v):
    rows = len(m)
    w = [0]*rows
    irange = range(len(v))
    sum = 0
    for j in range(rows):
        r = m[j]
        for i in irange:
            sum += r[i]*v[i]
    w[j],sum = sum,0
return w

それは私のものではありませんが、それは私が怒って削除する前にコーディングしたものです。エラーは次のとおりです: TypeError: unsupported operand type(s) for +: 'int' and 'list'

私は、Pythonがベクトルをintまたはリストとして見ており、型の違いにより基本的な演算子を実行しないと推測しています。これを回避する方法はありますか?残念ながら Numpy は使えません。

4

1 に答える 1

8

以下は、純粋な python の行列とベクトルの乗算の別の短いアプローチです。

 import operator
 import itertools

 def dot(x, y):
     assert len(x) == len(y)
     return sum(itertools.starmap(operator.mul, itertools.izip(x, y)))

 def matmult(m, v):
     return [dot(row, v) for row in m]

itertools.izip(これは python 2 用です -- python 3だけに置き換えてzipください。)

于 2012-05-08T18:25:19.313 に答える