How to| 将函数映射于列表
Wolfram 语言包含许多功能强大的操作,用于使用列表. 常常需要将函数映射到每个列表的每个单个元素. 对于具有可列表性的函数,在默认情况下就能做到,而对于具有不可列表性的函数,您可以使用 Map 来执行此操作.
mylist = Range[5]您可以使用 Map 将函数映射到列表的每个元素;下面的例子使用的是一个未定义的函数 f:
Map[f, mylist]可以使用 /@ 作为 Map 的简写形式(这个命令与上例中的相同):
f /@ mylist大多数数学函数具有 Listable 属性,表示它们将自动映射于列表:
Attributes[Sin]Sin[mylist]如果函数非 Listable,您可以使用 Map. 设置由5个2×2矩阵组成的列表:
matrices = RandomInteger[1, {5, 2, 2}]使用 Map 将 MatrixForm 映射于列表,以数学符号形式查看每一个矩阵:
MatrixForm /@ matrices现在用 Map 计算列表中每个矩阵的特征值:
Eigenvalues /@ matricesMap 不仅可以操作列表. 它也可以用于任何表达式:
Map[f, a + b + c + d]Apply 是另一个函数编程操作. 它用于替换一个表达式的头:
您可以通过两个未定义的函数 f 和 g 来看这是怎样作用的:
Apply[f, g[a, b, c, d]]Apply 用 @@ 作为简写形式(这个命令与上例中的相同):
f@@g[a, b, c, d]在 Wolfram 语言中公用表达式以 StandardForm 形式显示,而它们的底层 FullForm 说明可以如何使用 Apply:
{Plus[a, b, c], Times[a, b, c], List[a, b, c]}Apply[Times, a + b + c]当您想要将列表中的元素转换为函数的参数时,Apply 很有用.
pairs = RandomInteger[{1, 10}, {5, 2}]Mod 求有序对中第一个数除以第二个数得到的余数:
Mod[10, 4]将 Mod 应用于全部有序对,需要在列表的第一层作用(由 {1} 指定):
Apply[Mod, pairs, {1}]Mod@@@pairs这是完成同样任务的另一种方法,方法是利用带有 Function 的纯函数:
Map[Function[w, Apply[Mod, w]], pairs]这里使用 Function 的简写形式:
Map[Apply[Mod, #]&, pairs]