2014-10-24 2 views
1

Kroneckerproduct에서 불특정 (한정) 행렬을 결합하고 싶습니다. 이 작업을 수행하기 위해 행렬에 행렬을 저장하려고하지만이를 수행하는 방법을 모르겠습니다. 현재 내가 가지고있는 것 :numpy 배열로 배열 채우기

for i in range(LNew-2): 
    for j in range(LNew-2): 
     Bulk = np.empty(shape=(LNew-1,LNew-1)) 
     if i == j: 
      Bulk[i,j]=H2 
     else: 
      Bulk[i,j]=idm 

여기서 H2와 idm은 모두 Kronecker 제품에서 결합하려는 행렬입니다. 그러나 벌크가 ndarray 객체이기 때문에 내부에 arraylike 객체를 받아들이지 않을 것이라고 생각합니다.

편집 :

이 나는이 아이디어를 사용하고자하는 기능입니다. 나는 그것을 양자 스핀 체인을위한 해밀 토니안 행렬을 만들기 위해 사용하고 있습니다. 따라서 H2는 2 개의 입자 체인에 대한 해밀턴이다. H2는 4x4 행렬이고 idm은 2x2 항등 행렬이다.

이제 세 입자 체인 np.kron이다 (H2, IDM) + np.kron (IDM, H2)

네 입자 np.kron (np.kron위한

(H2, idm) + np.kron (idm, np.kron (H2, idm)) + np.kron (idm, np.kron (idm, H2)) 등등.

def ExpandHN(LNew): 
idm = np.identity(2) 
H2 = GetH(2,'N') 
HNew = H2 
for i in range(LNew-2): 
    for j in range(LNew-2): 
     Bulk = np.empty(shape=(LNew-1,LNew-1)) 
     if i == j: 
      Bulk[i,j]=H2 
     else: 
      Bulk[i,j]=idm 
i = 0 
for i in range(LNew-2): 
    for j in range(LNew-3): 
     HNew += np.kron(Bulk[i,j],Bulk[i,j+1]) #something like this 

return HNew 

볼 수 있듯이 두 번째 for 루프 집합은 효과가 없습니다.

누군가가 완전히 다르지만 작동하는 해결책을 가지고 있다면 나는 그 점에도 만족할 것이라고 말했습니다.

+0

당신이'Bulk' 매트릭스 내에서 개별 개체로 MATRICS를 저장 하시겠습니까, 또는 H2'와'idm''에 대한 수용하기 위해'Bulk'를 "폭파"싶어; 후자의 경우'H2'와'idm'의 모양은 무엇입니까? – Evert

+1

아마도 전체 코드에 대해 조금 더 알려줄 수 있습니다. 크로네 커 제품을 계산하는 것이 목표라고 말했듯이, "numpy.kron"에 대해 알고 있습니까? – magnetometer

+0

아직 해밀턴의 건설 규칙을 이해하지 못했습니다. 따라서 두 개의 입자 체인의 경우 'H2'입니다. H4 = np.kron (H3, idm) + np.kron (H2, idm) + np.kron (idm, H2) '라고 가정하면, (idm, H3)'이지만, 그렇게되지는 않습니다. 그러나'Bulk'를 만들지 않고 루프 안에서'HNew'를 계산할 수 있을까요? – magnetometer

답변

1

제가 올바르게 이해한다면 질문은 numpy로 배열의 배열을 만드는 방법에 관한 것입니다.

Bulk = dict() 
for i in range(LNew-2): 
    for j in range(LNew-2): 
     if i == j: 
      Bulk[(i,j)]=H2 
     else: 
      Bulk[(i,j)]=idm 

키와 튜플의 사용은 당신이 행렬의 배열과 같은 인덱스를 유지 관리 할 수 ​​있습니다 : 나는 표준 파이썬 객체 dict를 사용하는 것이 좋습니다 것입니다. 두 루프 모두 외부에서 벌크를 정의해야합니다 (모든 경우).

HTH

+0

이 도움으로 대단히 감사합니다. 런타임을 7.5 분에서 45 분으로 줄였습니다. – AppMathPhys

관련 문제