我有一个列表和一个带有4个参数的任意函数,比方说{1, 11, 3, 13, 9, 0, 12, 7}
和f[{x,y,z,w}]={x+y, z+w}
,我想要做的是形成一个新列表,使原始列表中的4个连续元素为评估得到一个新值作为新列表的组件,并且必须在原始列表中的每2个位置进行评估,在这种情况下,结果列表是:
{{12, 16}, {16, 9}, {9, 19}}
注意这里4和2可以改变。如何在Mathematica中方便地做到这一点?我想这就像Map
,但不知道如何联系。
答案 0 :(得分: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相同的结果。
答案 1 :(得分:11)
f[{x_, y_, z_, w_}] = {x + y, z + w};
list = {1, 11, 3, 13, 9, 0, 12, 7};
f /@ Partition[list, 4, 2]