Ответ 1
NumPy реализует концепцию "действия над определенной осью". Общая функция numpy.apply_along_axis()
:
>>> numpy.apply_along_axis(sum, 1, X)
array([15, 30])
(где sum
, конечно, может быть заменено чем-либо).
У меня есть массив 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
наиболее эффективным способом?
NumPy реализует концепцию "действия над определенной осью". Общая функция numpy.apply_along_axis()
:
>>> numpy.apply_along_axis(sum, 1, X)
array([15, 30])
(где sum
, конечно, может быть заменено чем-либо).
Должно ли это быть что-то, предоставляемое numpy? Потому что я просто вижу понимание списка
[action_to_apply(row) for row in X]
Вот еще один снимок, который учитывает тип и размер результата:
numpy.fromiter((your_func(row) for row in X), dtype=bool, count=len(X))
Несмотря на то, что цикл не является циклом C, установка типа и размера результата может помочь ускорить процесс.