What is the most efficient (quickest) way to multiply 20 identical 6×6 matrices (M)?

`N = 20 w = sy.Symbol("w");v = sy.Symbol("v");p = sy.Symbol("p");q = sy.Symbol("q");c = 1;n = 1;nc = 1 M = np.array([[w*p*q,w*q,0,0,0,0], [0,0,v,0,0,0], [0,0,0,nc,0,c], [0,0,0,0,v,0], [w,w,v,nc,0,c], [0,0,0,n,0,1]]) Mi = np.array([[w*p*q,w*q,0,0,0,0], [0,0,v,0,0,0], [0,0,0,nc,0,c], [0,0,0,0,v,0], [w,w,v,nc,0,c], [0,0,0,n,0,1]]) for l in range(N-1): M = np.dot(M, Mi) difZ = sy.diff(Z2,w) expr = w*(np.divide(difZ,Z2)) Z_lamda = sy.lambdify([w,v,p,q], expr, "numpy") `