У меня есть функция следующей структуры.Он в основном вычисляет верхний треугольник матрицы и делает его симметричным.Можно ли сделать это быстрее, используя некоторые хитрые уловки?
import numpy as np
def g(x, y):
# some calculation that returns a float
def f(a):
"""
a is a list of objects, return a symmetric Numpy array
"""
n = len(a)
ret = np.empty((n,n))
for i in range(1, n):
for j in range(i+1, n):
ret[i, j] = ret[j, i] = g(a[i], a[j])
Дополнительные сведения: Здесь a
- это список объектов (фреймов траектории), который содержит массив Nx3 (положение частиц) в качестве свойства итолько этот массив Nx3 Numpy имеет отношение к расчету.Таким образом, для простоты мы можем предположить, что a
- это список numpy массивов.g
использует только вычисления для вычисления.Например, это можно рассматривать как геометрическое выравнивание, а затем вычисление среднего расстояния.