Как преобразовать сложный дубль в массив python - PullRequest
0 голосов
/ 02 мая 2020

У меня есть набор сценариев 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...