2010-11-16 7 views
0
haches d

A partir d'une Arrayarr, et un List d'axes lst de longueur k, ce qui est une bonne façon de résumer des valeurs sur les axes indiqués dans lst? Lorsque lst={1,2,...,m}, ce serait la même chose que Nest[Total,arr,m]Résumant sur sur mesure

Exemple:

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

Ensuite f[arr,{1}] aurait des dimensions {3,4}, f[arr,{2}] aura des dimensions {2,4}, f[arr,{2,3}] aura des dimensions {2}, f[arr,{1,2,3}] aura la tête Plus et dimensions {}

Répondre

1

Est-ce que Fold[Total[#, {#2}]&, arr, lst] fait ce que vous voulez?

MISE À JOUR

Comment cela?

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

(et une pointe o » le chapeau à @belisarius =))

+0

Pas tout à fait, ce n'est pas la même chose que 'Nest [Total, arr, k]' 'quand LST = Range [k]', a ajouté quelques exemples –

+0

supprimé ma réponse à penser ... tnx pour votre commentaires! –

+0

Si nous classons les index à l'avance, je pense que le Fold avec le i ++ est correct –

0

Est-ce que faire ce que vous voulez?

f[arr_, coords_] := 
With[{perm = 
    Ordering[ 
    Join[coords, Complement[Range[TensorRank[arr]], coords]]]}, 
    Total[Transpose[arr, perm], Length[coords]] 
    ]