Можно ли векторизовать этот расчет в NumPy? - PullRequest
0 голосов
/ 12 марта 2019

Можно ли векторизовать следующее выражение numpy массивов для ускорения?

k_lin1x = [2*k_lin[i]*k_lin[i+1]/(k_lin[i]+k_lin[i+1]) for i in range(len(k_lin)-1)]

Можно ли векторизовать этот расчет в numpy?

1 Ответ

0 голосов
/ 12 марта 2019
x1 = k_lin
x2 = k_lin
s = len(k_lin)-1

np.roll(x2, -1) #do this do bring the column one position right

result1 = x2[:s]+x1[:s] #your divider. You add everything but the last element
result2 = x2[:s]*x1[:s] #your upper part

# in one line
result = 2*x2[:s]*x1[:s] / (x2[:s]+x1[:s])

Ваш последний столбец не будет добавлен или взят в расчеты, и вы можете сделать это, просто используя np.roll для смещения столбцов.x2 [0] = x1 [1], x2 [1] = x1 [2].

Это всего лишь демонстрация того, как вы должны подходить к Google Numpy Roll.Также вместо использования s на x2 вы можете просто отбросить последний столбец, поскольку он бесполезен для вычислений.

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