# Python 3: Multiply a vector by a matrix without NumPy

## Python 3: Multiply a vector by a matrix without NumPy

The Numpythonic approach: (using `numpy.dot` in order to get the dot product of two matrices)

``````In [1]: import numpy as np

In [3]: np.dot([1,0,0,1,0,0], [[0,1],[1,1],[1,0],[1,0],[1,1],[0,1]])
Out[3]: array([1, 1])
``````

The Pythonic approach:

The length of your second `for` loop is `len(v)` and you attempt to indexing `v` based on that so you got index Error . As a more pythonic way you can use `zip` function to get the columns of a list then use `starmap` and `mul` within a list comprehension:

``````In [13]: first,second=[1,0,0,1,0,0], [[0,1],[1,1],[1,0],[1,0],[1,1],[0,1]]

In [14]: from itertools import starmap

In [15]: from operator import mul

In [16]: [sum(starmap(mul, zip(first, col))) for col in zip(*second)]
Out[16]: [1, 1]
``````

I think the problem with your code was that you loop through the rows of the matrix rather than by the columns. Also you dont reset your total variable after each vector*matrix column calculation. This is what you want:

``````def multiply(v, G):
result = []
for i in range(len(G[0])): #this loops through columns of the matrix
total = 0
for j in range(len(v)): #this loops through vector coordinates & rows of matrix
total += v[j] * G[j][i]
result.append(total)
return result
``````

#### Python 3: Multiply a vector by a matrix without NumPy

i have attached a code for matrix multiplication do follow the example format for one dimensional multiplication (lists of list)

``````def MM(a,b):
c = []
for i in range(0,len(a)):
temp=[]
for j in range(0,len(b[0])):
s = 0
for k in range(0,len(a[0])):
s += a[i][k]*b[k][j]
temp.append(s)
c.append(temp)

return c
a=[[1,2]]
b=[[1],[2]]
print(MM(a,b))
``````

result is [[5]]