Допустим, у нас есть матрица из 3 строк и 2 столбцов в виде mat, и я хочу применить к каждой 3 строке одну из функций списка what_functions_to_apply_list, для которой у меня есть их определение. Таким образом, результат np.apply_along_axis должен быть в 3 раза больше размера вывода функций.
Как я могу сделать это без зацикливания векторизованным способом?
например
def f1(inp1,inp2):
return out1, out2
куда
functions_dic = {'f1': func1, 'f2':func2, 'f3':func3}
what_functions_to_apply_list = ['f1','f1','f2']
funcs_inputs = [[inp11,inp12], [inp21,inp32], [inp31,inp32]]
mat = np.ones((3, 2))
np.apply_along_axis(what_functions_to_apply_list , 1, mat)
apply_along_axis не предназначен для такого использования. Для начала, первый аргумент — это функция, а не список функций. Даже с правильной функцией это не более быстрая альтернатива явной итерации. Это не инструмент векторизации без цикла.
Пожалуйста, добавьте образцы данных.






Прямое применение списка функций к строкам массива:
In [418]: alist = [np.add, np.subtract, np.multiply]
In [419]: data = np.arange(6).reshape(3,2)
In [420]: [foo(*ab) for foo, ab in zip(alist, data)]
Out[420]: [1, -1, 20]
как насчет предоставления входных данных для каждой функции, а также
Это предоставление входных данных, строк data. Если вы имеете в виду другие параметры (например, ось), вам придется сначала создать функции (или лямбда-выражения), которые устанавливают их.
Вы не можете. Применение пользовательской функции, подобной этой, обязательно потребует вызова Python, и она будет работать со скоростью цикла
for.