关于Map函数的想法

关于Map函数的想法

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

问题

有一组数,我想将 > 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]

以上,所有
2017/6/9

posted on 2017-06-09 11:39  WMN7Q  阅读(169)  评论(0编辑  收藏  举报

导航