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 루프 집합은 효과가 없습니다.
누군가가 완전히 다르지만 작동하는 해결책을 가지고 있다면 나는 그 점에도 만족할 것이라고 말했습니다.
당신이'Bulk' 매트릭스 내에서 개별 개체로 MATRICS를 저장 하시겠습니까, 또는 H2'와'idm''에 대한 수용하기 위해'Bulk'를 "폭파"싶어; 후자의 경우'H2'와'idm'의 모양은 무엇입니까? – Evert
아마도 전체 코드에 대해 조금 더 알려줄 수 있습니다. 크로네 커 제품을 계산하는 것이 목표라고 말했듯이, "numpy.kron"에 대해 알고 있습니까? – magnetometer
아직 해밀턴의 건설 규칙을 이해하지 못했습니다. 따라서 두 개의 입자 체인의 경우 'H2'입니다. H4 = np.kron (H3, idm) + np.kron (H2, idm) + np.kron (idm, H2) '라고 가정하면, (idm, H3)'이지만, 그렇게되지는 않습니다. 그러나'Bulk'를 만들지 않고 루프 안에서'HNew'를 계산할 수 있을까요? – magnetometer