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)
我正在尝试为总能量 (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)