Более быстрое вычисление для Double для относительной позиции L oop in Python - PullRequest
0 голосов
/ 08 марта 2020

У меня есть следующая проблема вычисления относительного положения массива X [n]:

Изображение уравнения

В настоящее время я делаю следующие вычисления:

Давайте возьмем X = [1,2,3,4,5,6,7,8,9,10], тогда:

D = []
for idx1 in range(0,len(X)):
    aux = []
    for idx2 in range(idx1, len(X)):
        aux.append(np.sign(X[idx1]-X[idx2]))
    D.append(np.sum(aux))

Вывод этого кода:

D = [-9, -8, -7, -6, -5, -4, -3, -2, -1, 0]

Однако, слишком долго X массивы, это вычисление очень медленно! Есть ли у кого-нибудь предложения о том, как сделать это быстрее? Паралл не так просто два из-за промежуточного шага "aux"! Я думал о некотором матричном подходе.

1 Ответ

0 голосов
/ 09 марта 2020

Вы можете преобразовать X в np.array тип раньше.

X = np.array([1,2,3,4,5,6,7,8,9,10])

И затем сделать векторизованный l oop следующим образом:

D = [np.sum(np.sign(X[idx1]-X[idx1:])) for idx1 in range(0,len(X))]

Это должно быть намного быстрее.

Обратите внимание, что, вероятно, существует более умный алгоритм. Этот вычисляет результат за O(n^2) время (где n = len(X)).

...