Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

(где sum, конечно, может быть заменено чем-либо).

Ответ 2

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

[action_to_apply(row) for row in X]

Ответ 3

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

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

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