Функция np.apply_along_axis() кажется очень медленной (без выхода через 15 минут). Есть ли быстрый способ выполнить эту функцию на длинном массиве без необходимости распараллеливать операцию? Я специально говорю о массивах с миллионами элементов.
Вот пример того, что я пытаюсь сделать. Пожалуйста, проигнорируйте упрощенное определение my_func, цель состоит не в том, чтобы умножить массив на 55 (что, конечно же, можно сделать на месте), а на иллюстрации. На практике my_func немного сложнее, принимает дополнительные аргументы и, как результат, каждый элемент a изменяется по-разному, т.е. Не просто умножается на 55.
>>> def my_func(a):
... return a[0]*55
>>> a = np.ones((200000000,1))
>>> np.apply_along_axis(my_func, 1, a)
Изменить:
a = np.ones((20,1))
def my_func(a, i,j):
... b = np.zeros((2,2))
... b[0,0] = a[i]
... b[1,0] = a[i]
... b[0,1] = a[i]
... b[1,1] = a[j]
... return linalg.eigh(b)
>>> my_func(a,1,1)
(array([ 0., 2.]), array([[-0.70710678, 0.70710678],
[ 0.70710678, 0.70710678]]))