Complex matrix multiplication#

import numpy as np
from math import sqrt
U = np.matrix([[1/sqrt(2)+1j/2, -1j/2], 
              [1/2, 1/2+1j/sqrt(2)]])
X = np.matrix([[0,1],[1,0]])
Y = np.matrix([[0,-1j],[1j,0]])
Z = np.matrix([[1,0],[0,-1]])
# U.getH()
np.matmul(U,X)
print(np.matmul(U,X,U.H))
print(np.matmul(np.dot(U,X),U.getH()))
print(np.matmul(np.matmul(U,X),U.H))
print(np.dot(np.dot(U,X),U.getH()))
print(np.dot(np.dot(U,Y),U.getH()))
print(np.dot(np.dot(U,Z),U.getH()))
[[0.        -0.5j        0.70710678+0.5j       ]
 [0.5       +0.70710678j 0.5       +0.j        ]]
[[-0.5       +0.j   0.70710678-0.5j]
 [ 0.70710678+0.5j  0.5       +0.j ]]
[[-0.5       +0.j   0.70710678-0.5j]
 [ 0.70710678+0.5j  0.5       +0.j ]]
[[-0.5       +0.j   0.70710678-0.5j]
 [ 0.70710678+0.5j  0.5       +0.j ]]
[[ 7.07106781e-01+0.j          8.86511593e-17-0.70710678j]
 [ 1.11022302e-16+0.70710678j -7.07106781e-01+0.j        ]]
[[ 0.5       +0.j   0.70710678+0.5j]
 [ 0.70710678-0.5j -0.5       +0.j ]]
print(np.matmul(U,U.getH()))
[[1.+0.j 0.+0.j]
 [0.+0.j 1.+0.j]]
print(np.dot(U,U.getH()))
[[1.+0.j 0.+0.j]
 [0.+0.j 1.+0.j]]
from scipy.linalg import expm, sinm, cosm
import numpy as np
# hadmard gate
h = np.array([[1.0, 1.0], [1.0, -1.0]])
expm(1j*h/np.sqrt(2)*np.pi/2)
array([[6.123234e-17+0.70710678j, 0.000000e+00+0.70710678j],
       [0.000000e+00+0.70710678j, 6.123234e-17-0.70710678j]])