2010-11-16 3 views
0

Начиная с Arrayarr и 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 и размеры {}

ответ

1

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

UPDATE

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

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

(и наконечник о»шляпа @belisarius =))

+0

Не совсем, это не то же самое, как 'Nest [Всего, аранжировка, к]' 'когда LST = Range [к] ', добавлено еще несколько примеров –

+0

Удалены мой ответ думать ... TNX для вашего Комментарии! –

+0

, если мы сортируем индексы заранее, я думаю, что Fold с i ++ является правильным –

0

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

f[arr_, coords_] := 
With[{perm = 
    Ordering[ 
    Join[coords, Complement[Range[TensorRank[arr]], coords]]]}, 
    Total[Transpose[arr, perm], Length[coords]] 
    ] 
Смежные вопросы