欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mathematica Pure Function in Map 在Map中使用纯函数

程序员文章站 2022-03-02 10:49:30
...

前两天在看Mathematica关于Pure Fucntion的帮助文档时, 发现了这样的一个与Map联用的例子:
Mathematica Pure Function in Map 在Map中使用纯函数
乍一看,非常困惑的思考为啥结果不是 (a+b+c)^2。纠结了很久以后,今天抽空把Mathematical打开试了一下,终于发现了问题所在。说之前,先看下这两个例子:

*Using pure function in Map*in[1]:=Map[Function[x, x^2], a + b + c]
Out[1]:=  a^2 + b^2 + c^2
In[2]:= Map[Function[x, x^2], {a + b + c}]
Out[2]:={(a + b + c)^2}

其实,只要对比下这两个例子,问题的原因就很清楚了,Map方法的第二个参数应该是个list,第一种情况,其实Mathematica将a b c作为符号,三者相加时,加法优先级低,Map的高,所以先平方再加。第二种,因为是在list内,所以加法先做,然后再使用Map方法

再看下边两个例子:

in1】:=Map[Function[x, x^2], {Norm[{a, b, c}]}]
Out[1]:={Abs[a]^2 + Abs[b]^2 + Abs[c]^2}

In[2]:= Map[Function[x, x^2], Norm[{a, b, c}]]
Out[2]:=((Abs[a]^2 + Abs[b]^2 + Abs[c]^2)^2)^(1/4)

第一个list范数在一个list内,所以,正常的输出,结果是范数的平方。
第二个,list范数没有外围的list定义,所以具体执行的Map方法非常令人困惑。为了搞清楚为啥是这样的结果,我又做了几个测试:

In;=Map[Function[x, x^2], a^b]
Out:= (a^2)^b^2
in:= Map[Function[x, x^2], a^0.5]
Out:= (a^2)^0.25

好吧,清楚了吧!