Векторизация по строкам массива - PullRequest
11 голосов
/ 09 мая 2011

У меня есть массив 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 наиболее эффективным способом?

Ответы [ 3 ]

7 голосов
/ 09 мая 2011

NumPy реализует концепцию «действия над определенной осью». Общая функция numpy.apply_along_axis():

>>> numpy.apply_along_axis(sum, 1, X)
array([15, 30])

(где sum, конечно, можно заменить на что угодно).

0 голосов
/ 10 мая 2011

Вот еще один пример, который учитывает тип и размер результата:

numpy.fromiter((your_func(row) for row in X), dtype=bool, count=len(X))

Даже если цикл не является циклом C, установка типа и размера результата можетпомочь ускорить процесс.

0 голосов
/ 10 мая 2011

Должно ли это быть что-то, предоставленное NumPy?Потому что я просто вижу понимание списка

[action_to_apply(row) for row in X]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...