numpy用数组填充数组

时间:2014-10-24 11:36:30

标签: python arrays numpy

我想在Kroneckerproduct下组合一个未指定(有限)数量的矩阵。为了做到这一点,我想将矩阵保存在一个数组中,但我不知道如何做到这一点。目前我有:

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循环尚未解决。

话虽如此,如果某人有完全不同但工作正常的解决方案,我也会对此感到高兴。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你的问题归结为如何使用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