Ошибка типа: объект 'numpy.float64' не поддерживает назначение элемента - аналогичный код, возникает ошибка - PullRequest
0 голосов
/ 04 июля 2019

Я пишу код молекулярной динамики, и для этого у меня есть функция, которая вычисляет силы между частицами: консервативные, случайные и диссипативные силы. Консервативные силы - это парные силы, что означает, что у меня есть двойная петля для их вычисления. Я хотел сэкономить время и включить расчет случайных и диссипативных сил в один из циклов двойного цикла следующим образом:

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()

В чем разница между обоими вычислениями? Почему нет ошибки, когда вычисления выполняются в отдельном цикле?

1 Ответ

0 голосов
/ 04 июля 2019

решено: как указал @micric, во втором цикле есть переменная с именем 'fr', которая имеет тип float.Я сделал ошибку, используя одно и то же имя для массива.Отсюда жалобы Питона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...