Mathematica进阶[6]–关于Map函数的想法

  • 2
  • 445 views
  • A+
所属分类:Wolfram语言进阶
摘要这里会介绍关于Mathematica中Map函数的用法,并举了一个例子,方便大家理解。 Map函数在Mathematica中是非常常用的,用好了可以减少很多代码量,所以还是要学习一下的。

 

这一篇文章我会讲一下在mathematicaMap函数的思想,并举一个例子,希望大家举一反三。

 


更新:

对于这个问题还有一种更好的解答,大家可以看下面的评论。


文章目录(Table of Contents)

问题

 

有一组数,我想将 > 1 的全部变成1, < 1 的全部变成0,应该如何操作。

 

想法

 

我们可以先定义一个规则,就是把上面的要求变成一个表达式,如下所示

 


If[t > 1, 1, 0]

 

接着,我们可以使用Map函数将上面的规则应用到数组中的每一个元素中去。于是我们得到了下面的解决方案

 

 

当然,我们也可以将上面的式子缩写,写成如下的形式

 

 

问题扩展

 

我们将上面的问题变为:我想将 > 1 的全部变成1, <-1 的全部变成-1,在-1到1之间的变成0,应该如何操作。

其实这个问题的解决办法和上面的是一样的,也是先把规则定义好,在使用Map即可。

 

 

作用

 

我们再来看一个具体的应用场景:比如想要统计一组数组中大于1的元素的个数,那么就可以进行如下的操作。

思路

  1. 首先将数组中>1的数都变成1,<1的数都变成0

  2. 对新的数组进行求和

  3. 这样就统计出一个数组中所有大于1的元素的个数

 


Clear[rule];

rule[t_] := If[t >= 1, 1, 0]

Total[Map[rule, list]]

 

 

或者,上面的也可以变成对一个数组中大于一的元素进行求和,也可以进行如下的操作

  1. 首先将数组中>1的数都变成1,<1的数都变成0

  2. 将新的数组与原数组相乘,此时<1的都是0*x,都变成了0,而大于1的不变

  3. 对新的数组求和,这样就统计出一个数组中所有大于1的元素的和了

 


Clear[rule];

rule[t_] := If[t >= 1, 1, 0]

Total[Map[rule, list]*list]

 

 

  • 微信公众号
  • 关注微信公众号
  • weinxin
  • QQ群
  • 我们的QQ群号
  • weinxin
王 茂南

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:2   其中:访客  1   博主  1

    • avatar wjxway

      1-UnitStep[1-x]
      即可,能用内置的,数学的,列表化的就不要用自己写的If+Map了~