函数作用于表达式的部分项

当有一系列元素时,经常需要将一个函数分别作用于每一项中,这可以在 Mathematica 中用 Map 来实现.

作用于列表中的每一个元素.
In[1]:=
Click for copyable input
Out[1]=
定义作用于一个列表中前两个元素上的函数.
In[2]:=
Click for copyable input
Map 作用于每一个列表上.
In[3]:=
Click for copyable input
Out[3]=
Map[f,{a,b,...}]f 作用于列表的每一个元素上得到

将函数作用于列表中的每一个元素上.

Map[f, expr] 的作用是将函数 f 作用于表达式 expr 的每一个元素和组成部分上. 可以把 Map 用于任何表达式,不仅仅在列表上.

作用于和式的每个元素.
In[4]:=
Click for copyable input
Out[4]=
Sqrt 作用于  的每个变量.
In[5]:=
Click for copyable input
Out[5]=

Map[f, expr]f 作用于表达式 expr 第一层的项. 用 MapAll[f, expr] 可以将 f 作用于表达式 expr所有 项.

定义2x2矩阵 .
In[6]:=
Click for copyable input
Out[6]=
Map 作用于 的第一层,即矩阵各行.
In[7]:=
Click for copyable input
Out[7]=
MapAll 作用于 的所有元素上. 如果仔细查看该表达式,将看到 在每一项展开.
In[8]:=
Click for copyable input
Out[8]=

一般说来,如 "表达式的层次结构" 中讨论的,可以通过指定层的方法用 Map 将函数作用于表达式的一些项上.

作用于 的第2层元素上.
In[9]:=
Click for copyable input
Out[9]=
设定 Heads->True 可将 作用于每一项的头部及其元素上.
In[10]:=
Click for copyable input
Out[10]=
Map[f,expr] f/@exprf 作用于表达式 expr 的第一层
MapAll[f,expr] f//@exprf 作用于表达式 expr 的所有项
Map[f,expr,lev]f 作用于表达式 expr 的第 lev 层的每项

将函数作用于表达式不同部分的方法.

可以通过指定层的方法用 Map 将函数作用于表达式的一些项上. 通过指定层次可以使函数作用于表达式的某些项上,用MapAt 可以通过列出元素标号使函数作用于表达式的某些项上,请参见 "表达式的项".

定义2x3矩阵.
In[11]:=
Click for copyable input
Out[11]=
作用于 的项上.
In[12]:=
Click for copyable input
Out[12]=
给出 中出现的位置.
In[13]:=
Click for copyable input
Out[13]=
可以将 Position 得到的值代入 MapAt 中去.
In[14]:=
Click for copyable input
Out[14]=
为了避免混淆,即使在仅有一个下标时,也应该以列表的形式指定每一项.
In[15]:=
Click for copyable input
Out[15]=
MapAt[f,expr,{part1,part2,...}]f 作用于 expr 中指定的项

将函数作用于表达式中指定的项.

定义表达式.
In[16]:=
Click for copyable input
Out[16]=
给出 的完全格式.
In[17]:=
Click for copyable input
Out[17]//FullForm=
MapAt 可用在任何表达式中. 注意,其中指定项的索引是基于表达式的完全格式.
In[18]:=
Click for copyable input
Out[18]=
MapIndexed[f,expr]f 作用于表达式的元素,f 的第二个变量给出表达式的每个元素项的位置
MapIndexed[f,expr,lev]f 作用于表达式指定层的元素,f 的第二个变量给出表达式中每项的指标号

函数作用于表达式中的项和其标号上.

作用于一个列表的每个元素上,其第2个自变量给出元素的标号 .
In[19]:=
Click for copyable input
Out[19]=
作用于矩阵的所有层.
In[20]:=
Click for copyable input
Out[20]=

Map 把一元函数作用于一个表达式的项上;MapThread 将多元函数作用于多个表达式.

MapThread[f,{expr1,expr2,...}]f 作用于每个表达式 中对应的项
MapThread[f,{expr1,expr2,...},lev]f 作用于 的指定层

同时将函数作用于多个表达式.

作用于相应的元素.
In[21]:=
Click for copyable input
Out[21]=
MapThread 可对结构相同的任意长度的表达式进行操作.
In[22]:=
Click for copyable input
Out[22]=

Map 等函数可以通过项的修改产生表达式,但有时不需要产生新的表达式,仅需要查看某些表达式,或者仅对表达式中的某些项进行运算. 一个典型的情况是当你所运用的函数具有某些"副作用"时,如进行赋值或产生输出时.

Scan[f,expr]求出 f 作用于 expr 中各项时的函数值
Scan[f,expr,lev]求出 f 作用中 expr 中第 lev 层项时的函数值

计算表达式中各项的函数值.

Map 作用于一个列表而产生新的列表.
In[23]:=
Click for copyable input
Out[23]=
Scan 计算将函数作用于每一个元素的结果,但不产生新的表达式.
Scan 从最低层开始访问表达式中的所有项.
New to Mathematica? Find your learning path »
Have a question? Ask support »