Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Векторизация по строкам массива

Автор вопроса: Fred FooОтветов: 3

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

pythonnumpyvectorization

Ответы

Ответ 1 · рейтинг 8 · Eric O Lebigot

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

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

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

Ответ 2 · Prashant Kumar

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

[action_to_apply(row) for row in X]

Ответ 3 · Eric O Lebigot

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

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы