IndexError: too many indices for array - Total Energy Matrix Variational Method

IndexError: too many indices for array - Total Energy Matrix Variational Method

我正在尝试为总能量 (H) 定义一个数组,其中满足以下关系:

<我| H | j > = E_j < i | j > = E_j * S[ i , j ]

而S[ i , j ]是重叠矩阵的对应元素。我有矩阵 E_j,我正在尝试按如下方式获取矩阵 H:

H = np.zeros([M])
for n in range (M):
    for m in range(M):
        H[n,m]= E[n]*S[n,m]
print ("H = ")
np.savetxt(sys.stdout, H, fmt= '%7.4f')

这给了我错误信息:"IndexError: too many indices for array"

我假设这与我尝试将一维数组乘以二维数组这一事实有关。不太确定是否有解决方法,但我们将不胜感激。

谢谢!

H 矩阵的初始化不正确。应该如下:

H = np.zeros([M,M])
for n in range (M):
    for m in range(M):
        H[n,m]= E[n]*S[n,m]
print ("H = ")
np.savetxt(sys.stdout, H, fmt= '%7.4f')

如果您正在使用 NumPy 数组,我建议您研究矢量化方法以提高性能。在你的例子中,你可以通过引入一个单一维度作为第二个维度 numpy.newaxis/None and then perform the element-wise multiplication with S. This would bring in broadcasting 来将 E 转换为 2D,这将在幕后将 E 的所有元素复制到S 的形状,这是一个非常有效的操作,然后乘以 S

所以,我们将有一条线来获得 H,像这样 -

H = E[:,None]*S

我们也可以使用 np.einsum,这可能看起来非常接近原始循环形式,迭代器 morphed 作为字符串,就像这样 -

H = np.einsum('n,nm->nm',E,S)