我们之前在讲Mathematica入门的时候,就讲过Mathematica中模式的概念。这一篇文章,我会更加详细的介绍一下在Mathematica中的模式。
模式的基本知识
我们首先讲一下下划线的含义,我们在使用过程中,经常会看到变量后面会根下划线,包括在函数定义的时候也会用到,那么这个下划线到底是什么意思呢?其实是由三种下划线的,分别是下面的三种:
- ___(三个下划线)表示匹配0个或多个表达式
- __表示匹配1个或多个表达式
- _表示任意表达式
顺便再说一下,符号/;
代表的是条件的意思,下面我们来看几个例子。
例子
我们首先生成一些随机数
data = Table[{RandomInteger[10], RandomInteger[10]}, 10]
>> {{10, 4}, {6, 9}, {5, 8}, {9, 5}, {3, 9}, {0, 1}, {1, 7}, {9, 9}, {4, 1}, {7, 5}}
接着我们来找第一个数字是5的组合
Cases[data, {5, _}]
>> {{5,8}}
当然,我们还可以找第一个数字不是5的所有组合
Cases[data, Except[{5, _}]]
>> {{10, 4}, {6, 9}, {9, 5}, {3, 9}, {0, 1}, {1, 7}, {9, 9}, {4, 1}, {7, 5}}
除了上面的写法,我们还有一种写法
test[{a_, b_}] := a != 5
Cases[data, _?test]
>> {{10, 4}, {6, 9}, {9, 5}, {3, 9}, {0, 1}, {1, 7}, {9, 9}, {4, 1}, {7, 5}}
这样也是可以找到第一个数字不是5的所有组合。关于_?的用法我们可以查一下?
接着我们来找一下带有5的组合,下面使用的符号|
就是或的意思
Cases[data, {5, _} | {_, 5}]
>> {{5, 8}, {9, 5}, {7, 5}}
接着我们来找第一项比5大的组合
Cases[data, {x_, _} /; x > 5]
>> {{10, 4}, {6, 9}, {9, 5}, {9, 9}, {7, 5}}
接着我们来找第一项和第二项都比5大的组合
Cases[data, {x_, y_} /; x > 5 && y > 5]
>> {{6, 9}, {9, 9}}
除了上面找一些符合条件的值,我们还可以进行一些运算,更新一下列表的值。如我们可以直接对一组进行求和,生成一个新的列表:
Cases[data, {x1_, x2_} :> x1 + x2]
>> {14, 15, 13, 14, 12, 1, 8, 18, 5, 12}
上面就是一些Mathematica中模式常见的应用,当然,还有一些更加巧妙的应用,比如我们可以使用下面的语句进行List的排序:
{4, 14, 5, 11, 12, 0, 6, 5, 1, 14} //. {x1___, x2_, x3_, x4___} /; x2 > x3 :> {x1, x3, x2, x4}
>> {0, 1, 4, 5, 5, 6, 11, 12, 14, 14}
我们可以在这个例子里看一下三个下划线,双下划线和单下划线分别的作用。
以上就是关于Mathematica中模式的一些应用。
- 微信公众号
- 关注微信公众号
- QQ群
- 我们的QQ群号
评论