TypeError:“numpy.float64”对象不支持项分配类似代码,出现错误

2024-06-06 05:54:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个分子动力学代码,为此我有一个计算粒子间作用力的函数:保守力、随机力和耗散力。保守力是成对的力,这意味着我有一个双环来计算它们。我想节省一些时间,并将随机力和耗散力的计算包括在双回路的其中一个回路中,如下所示:

fr = np.zeros((npart, dim))
fd = np.zeros((npart, dim))
fc = np.zeros((npart, dim))

for i in range(npart-1):

    for d in range(dim):
        # dissipative and random forces
        fd[i, d] = -gamma * v[i, d]
        fr[i, d] = noise/np.sqrt(dt) * np.random.normal()

    for j in range(i+1, npart):

        # conservative force for particle i
        fc[i, 0] = fc[i, 0] + (dX/r2) * fr
        fc[i, 1] = fc[i, 1] + (dY/r2) * fr
        fc[i, 2] = fc[i, 2] + (dZ/r2) * fr

        # conservative force for particle j (action-reaction)
        fc[j, 0] = fc[j, 0] - (dX/r2) * fr
        fc[j, 1] = fc[j, 1] - (dY/r2) * fr
        fc[j, 2] = fc[j, 2] - (dZ/r2) * fr

这里伽马、噪声和dt是常数。我得到以下错误:

    fr[i, d] = noise/np.sqrt(dt)*np.random.normal()
TypeError: 'numpy.float64' object does not support item assignment

然而,如果我计算外部独立回路中的随机力和耗散力,误差就会消失:

for i in range(npart):
    for d in range(dim):
        fd[i, d] = -gamma * v[i, d]
        fr[i, d] = noise/np.sqrt(dt) * np.random.normal()

两种计算方法的区别是什么?为什么在单独的循环中进行计算时没有错误


Tags: infornpdtzerosrangerandomfr