2012-01-08 14 views
5

Ho una lista e una funzione arbitraria che prende 4 parametri, diciamo {1, 11, 3, 13, 9, 0, 12, 7} e f[{x,y,z,w}]={x+y, z+w}, quello che voglio fare è formare un nuovo elenco tale che 4 elementi consecutivi in l'elenco originale vengono valutati per ottenere un nuovo valore come componente della nuova lista, e la valutazione deve essere fatto in ogni 2 posizioni nella lista originale, in questo caso, la lista risultante è:Come posso implementare un'operazione simile a una mappa in matematica

{{12, 16}, {16, 9}, {9, 19}} 

Nota qui 4 e 2 possono cambiare. Come farlo comodamente in Mathematica? Immagino questo come qualcosa come Map, ma non sono sicuro di come relazionarsi.

risposta

11
f[{x_, y_, z_, w_}] = {x + y, z + w}; 
list = {1, 11, 3, 13, 9, 0, 12, 7}; 
f /@ Partition[list, 4, 2] 
14

C'è un'alternativa al Map[f, Partition[...]]: Developer`PartitionMap. Che funziona esattamente come Map[f, Partition[list, n, ...]]. Così, il vostro codice sarebbe

Needs["Developer`"] 
f[{x_, y_, z_, w_}] = {x + y, z + w}; 
list = {1, 11, 3, 13, 9, 0, 12, 7}; 
PartitionMap[f,list, 4, 2] 

dare lo stesso risultato di Mark's answer.

Problemi correlati