2012-01-08 66 views
5

我有一個列表和一個任意函數,其中有4個參數,比如說{1, 11, 3, 13, 9, 0, 12, 7}f[{x,y,z,w}]={x+y, z+w},我想要做的是形成一個新的列表,使得連續4個元素原始列表進行評估,以獲得新的值作爲新名單的組成部分,並評估在原始列表每2個位置做,在這種情況下,所產生的名單是:我該如何在mathematica中實現這樣的映射式運算

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

注意這裏4和2可以改變。如何在Mathematica中方便地執行此操作?我想像這樣的Map,但不知道如何相關。

回答

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

還有一個替代Map[f, Partition[...]]Developer`PartitionMap。其中的作品完全像Map[f, Partition[list, n, ...]]。因此,您的代碼將爲

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] 

給出與Mark's answer相同的結果。