Быстрое вычисление тензоров инерции в Python

Мне нужно выполнить очень быстрое вычисление тензоров инерции в Python.

Проблема заключается в следующем:

Позволять xyz быть Numpy Array формы: (samples, atoms, 3) который описывает 3 декартовы координаты каждого atoms в каждом samples,

atoms в каждом образце должны быть разбиты на множество молекул. Мне нужен тензор инерции каждой молекулы в каждом образце.

Каждая молекула содержит n атомы, и они упорядочены таким образом, что они сгруппированы вместе. То есть:

   numpy.array( numpy.split(xyz, atoms/n, axis=1).shape )

возвращает массив формы: (количество молекул, образцов, атомов на молекулу, 3), где первый индекс проходит по молекулам.

Заметки:

  • Это очень похоже на проблему, решаемую здесь, но они вычисляют тензор инерции всей системы, в то время как мне нужны тензоры инерции ее частей (тензор инерции каждой молекулы в системе).
  • Было бы предпочтительно получить массив тензоров инерции.
  • Я думаю, что numpy.einsum будет хорошей альтернативой (но мне трудно это реализовать)
  • Я могу получить массив атомных масс быстро и без проблем.
  • Если это поможет, samples имеет размер от 100 до 500 ок., и atoms примерно до 20 000 (но операция выполняется во многих кусках, которые в общей сложности сделали около 1E5 выборок).

0 ответов

Другие вопросы по тегам