簡體   English   中英

numpy用數組填充數組

[英]numpy fill an array with arrays

我想在Kronecker產品下合並未指定(有限)的矩陣。 為了做到這一點,我想將矩陣保存在數組中,但是我不知道該怎么做。 目前,我有:

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產品下合並它們。 但是由於Bulk是一個ndarray對象,我想它不會接受其中的arraylike對象。

編輯:

這是我要使用此功能的功能。 我正在用它為量子自旋鏈建立哈密頓矩陣。 因此,H2是兩個粒子鏈的哈密頓量,H2是4x4矩陣,idm是2x2恆等矩陣。

現在三個粒子鏈是np.kron(H2,idm)+ np.kron(idm,H2)

對於四個粒子np.kron(np.kron(H2,idm),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循環尚未制定。

話雖這么說,如果某人有一個完全不同但可行的解決方案,我也會對此感到滿意。

如果我理解正確,那么您的問題可以歸結為如何使用numpy創建數組的數組。 我建議使用標准的python對象dict

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

通過使用元組作為鍵,您可以維護矩陣的類似數組的索引。 還要注意,您應該在兩個for循環之外定義Bulk(無論如何)。

HTH

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM