In [1]:
from __future__ import division

import numpy as np
In [2]:
A = np.array([
              [1,2,1],
              [0,1,3],
              [2,1,0]
              ])
In [3]:
P1 = np.array([[0,0,1,],[0,1,0],[1,0,0]])
E2 = np.array([[1,0,0,],[0,1,0],[0.5,0,1]])
P3 = np.array([[1,0,0,],[0,0,1],[0,1,0]])
E4 = np.array([[1,0,0,],[0,1,0],[0,02/3,1]])

Afinal = np.array([
              [2,1,0],
              [0,1.5,1],
              [0,0,7/3],
              ])

reduce(np.dot, [P1, E2, P3, E4, Afinal]) - A
Out[3]:
array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])
In [4]:
reduce(np.dot, [P1, E2, P3, E4])
Out[4]:
array([[ 0.5       ,  1.        ,  0.        ],
       [ 0.        ,  0.66666667,  1.        ],
       [ 1.        ,  0.        ,  0.        ]])
In []: