2012-01-08 78 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相同的结果。

相关问题