Есть ли эквивалентная функция R apply в Python? - PullRequest
1 голос
/ 28 апреля 2019

Я пытаюсь найти Python, эквивалентный функции применения R, но с многомерным массивом

Например, когда вызывается следующий код:

z <- array(1, dim = 2:4)
apply(z, 1, sum)

Результат:

[1] 12 12

и при вызове с двумя значениями поля:

apply(z, c(1,2), sum)

Результат:

     [,1] [,2] [,3]
[1,]    4    4    4
[2,]    4    4    4

Я обнаружил, что функция sum в numpy может использоваться, но не одинаково:

Например:

xx= np.ones((2,3,4))
np.sum(xx,axis=(1,2))

Результат:

array([12., 12.])

но я не могу найти функцию, эквивалентную ее применению в частности, когда речь идет о марже = c (1,2) Может ли кто-нибудь помочь?

1 Ответ

4 голосов
/ 28 апреля 2019

Эквивалент в NumPy:

xx.sum(axis=2)

То есть, вы суммируете по оси 2 (последнее измерение), которая, поскольку его длина равна 4, оставляет два других измерения (2,3) в качестве формы результата:

array([[4., 4., 4.],
       [4., 4., 4.]])

Возможно, более буквальный перевод вашего кода R будет:

np.apply_over_axes(np.sum, xx, 2)

Что дает аналогичный результат, но транспонирован. Однако это, вероятно, будет медленнее и не будет идиоматическим, если только выполняемая вами операция не является чем-то более сложным, чем сумма.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...