У меня есть набор сценариев Matlab, которые я хочу использовать для вычислений. Однако я хочу проанализировать результаты в Python. Во-первых, это код Matlab.
function[pauli_op_set,GAM] = pauli_ops(dim)
% Generates a set of basis operators of Hilbert-space dimension 'dim'.
%%
n=round(log(double(dim))./log(double(2)));
paulis=zeros(2,2,4);
paulis(:,:,1)=eye(2)./sqrt(2);
paulis(:,:,2)=[0,1;1,0]./sqrt(2);
paulis(:,:,3)=[0,-i;i,0]./sqrt(2);
paulis(:,:,4)=[1,0;0,-1]./sqrt(2);
pauli_op_set=zeros(2,2,n,dim.^2);
GAM=zeros(dim,dim,dim.^2);
basvec=zeros(dim.^2);
for l=1:dim.^2
choice_idx=dec2bas(l,4,n);
for m=1:n
pauli_op_set(:,:,m,l)=paulis(:,:,choice_idx(m));
if m==1
bascmp=paulis(:,:,choice_idx(m));
else
bascmp=kron(bascmp,paulis(:,:,choice_idx(m)));
end
end
GAM(:,:,l)=bascmp;
basvec(l,:)=reshape(bascmp,[dim.^2 1])';
end
gram=basvec*basvec';
norm(gram-eye(dim.^2));
end
Приведенный выше код дает следующий вывод с dim = 2, что правильно при запуске в Matlab. Первый вывод pauli_op_set :
ans(:,:,1,1) =
0.7071 + 0.0000i 0.0000 + 0.0000i
0.0000 + 0.0000i 0.7071 + 0.0000i
ans(:,:,1,2) =
0.0000 + 0.0000i 0.7071 + 0.0000i
0.7071 + 0.0000i 0.0000 + 0.0000i
ans(:,:,1,3) =
0.0000 + 0.0000i 0.0000 - 0.7071i
0.0000 + 0.7071i 0.0000 + 0.0000i
ans(:,:,1,4) =
0.7071 + 0.0000i 0.0000 + 0.0000i
0.0000 + 0.0000i -0.7071 + 0.0000i
Теперь я запускаю это в Python, используя
import matlab.engine
import numpy as np
eng = matlab.engine.start_matlab()
n = 1
D = 2**n
pauli_op_set, GAM2 = eng.pauli_ops(D,nargout = 2)
np.asarray(pauli_op_set)
, что дает
array([[[[ 0.70710678+0.j , 0. +0.j ,
0. +0.j , 0.70710678+0.j ]],
[[ 0. +0.j , 0.70710678+0.j ,
0. -0.70710678j, 0. +0.j ]]],
[[[ 0. +0.j , 0.70710678+0.j ,
0. +0.70710678j, 0. +0.j ]],
[[ 0.70710678+0.j , 0. +0.j ,
0. +0.j , -0.70710678+0.j ]]]])
Почему выходы из matlab и python отличаются? Здесь я сравниваю только первый выход, но оба выхода неверны в python.