Mathematica中的模式

  • A+
所属分类:Wolfram语言进阶
摘要这一篇文章算是mathematica中模式匹配的进一步说明,会更加详细的介绍一下mathematica中各种符号的意思,以及在模式匹配中的应用。

我们之前在讲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中模式的一些应用。

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

发表评论

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