У меня есть массив X, и я хочу применить функцию f ко всем строкам X:
# silly example
X = numpy.array([[1, 2, 3, 4, 5],
[6, 7, 8, 9, 0]], 'i')
def f(row): return sum(row)
y = numpy.vectorize(f, 'i')(rows(X))
Теперь y должно быть array([15,30], 'i'). Какой метод или магия нарезки реализует rows наиболее эффективным способом?
Ответ 1 · рейтинг 8 · Eric O Lebigot
NumPy реализует концепцию действия над определенной осью. Общая функция такова: numpy.apply_along_axis():
>>> numpy.apply_along_axis(sum, 1, X)
array([15, 30])
(где sum конечно можно заменить чем угодно).
Ответ 3 · Eric O Lebigot
Вот еще один пример, в котором учитываются тип и размер результата:
numpy.fromiter((your_func(row) for row in X), dtype=bool, count=len(X))
Несмотря на то, что цикл не является циклом C, установка типа и размера результата может помочь ускорить процесс.