Суммирование по пользовательским осям - PullRequest
0 голосов
/ 17 ноября 2010

Начиная с Array arr и List осей lst длины k, каков хороший способ суммировать значения по осям, указанным в lst? Когда lst={1,2,...,m}, это будет то же самое, что и Nest[Total,arr,m]

Пример:

arr = Array[a, {2, 3, 4}];

Тогда f[arr,{1}] будет иметь размеры {3,4}, f[arr,{2}] будет иметь размеры {2,4}, f[arr,{2,3}] будет иметь размеры {2}, f[arr,{1,2,3}] будет иметь головку Plus и размеры {}

Ответы [ 2 ]

1 голос
/ 17 ноября 2010

Fold[Total[#, {#2}]&, arr, lst] делает то, что вы хотите?

UPDATE

Как насчет этого?

f[arr_, lst_] :=
  Fold[Total[#, {#2}] &, arr, Sort[lst, Greater]]

(и подсказка @belisarius =))

0 голосов
/ 17 ноября 2010

Делает ли это то, что вы хотите?

f[arr_, coords_] :=
 With[{perm = 
    Ordering[
     Join[coords, Complement[Range[TensorRank[arr]], coords]]]},
  Total[Transpose[arr, perm], Length[coords]]
  ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...