2012-05-08 172 views
1

所以我試圖乘以一個向量的矩陣。 python不斷拋出一個錯誤。這是我想要的代碼: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:不支持的操作數類型爲+:'int'和'list'

我在猜測python將向量看作int或列表,並且不會執行任何操作基本操作員由於類型的不同而不同。任何方法來解決這個問題?不幸的是我不能使用Numpy。

+0

的錯誤出現在'sum + = r [i] * v [i]'行中。 – Ammar

+0

它看起來像'r [i] * v [i]'是一個列表,這可能意味着'r [i]'是一個列表,意味着'm [j] [i]'是一個列表。你能打印出你正在使用的'm'的值嗎? – Dougal

+0

它聞起來像**作業** – KurzedMetal

回答

4

下面是純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] 

(這是爲蟒2 - 取代itertools.izip只需zip在python 3)

+0

謝謝,我實際上已經整理出來了。謝謝您的幫助。 – Ammar

+2

@Ammar你至少可以獎勵這個用戶並接受他的回答,或者只是發佈你自己的回答,而不是讓這個問題開放? – KurzedMetal