Mathematica学习笔记(2)——List, Vector, Matrix
本文最后更新于442 天前,其中的信息可能已经过时,如有错误请发送邮件到lysun26@163.com

前言

这个笔记系列主要是记录一些常用的函数,以及对一些函数的理解,对于软件的详细使用还是推荐去看一些视频教程,B站和油管上都有。


列表简单来说就是一串数据或者多串数据,也就是数组。Mathematica中的列表中的元素可以为任何类型,不同类型的元素也可以组成一个列表,拥有很大的自由性,而这也是Mathematica语言的一大特点。

在Mathematica中,有一个很特色的地方,在一些情况下,那就是我们可以不必区分表达式和列表,甚至在一些情况,可以将他们看成一种东西。这体现在很多函数中,通过看一些函数所要求的参数,可以发现参数里有列表的函数,往往都可以把表达式也作为参数。这也是Mathematica一个特色,理解了之后,可以很大的提高我们的效率。

对列表的函数一般都可以用于表达式,这些函数可以对任意头部起作用,而不仅仅是List,在mathematica中,表达式也可以看作是一个列表。对一个表达式进行TreeForm,可以看出表达式的结构,从结构中可以将表达式看成多维列表。例如:

最上面是头部,对于列表来说,头部为List。因此,可以将这个表达式当成{1, x, {x, {a, b}}},对其进行列表操作后再转化为表达式。例如对上述表达式,如果在{3,2}这个位置插入元素z,则列表变为{1, x, {x, {z,{a, b}}}},注意对表达式插入时,同时会插入相应的头,如下图,插入z时,会插入Power的头。

列表官方笔记

列表函数

定义列表

直接定义

使用 {},列表元素的类型可以为各种类型。

a = {1, "rain", x^2}

根据表达式定义列表

Table[expr, {i, imin, imax, d}]

Table[x^2 + x, {x, 1, 10, 2}]

根据函数定义列表

Array。函数可以为之前定义的函数,比如f[x],也可以为匿名函数,比如 1+#^2&

从列表中提取元素

提取单个元素

提取首个元素

First[list]

提取末尾元素

Last[list]

提取指定位置的元素

使用两个"[[]]",序号可以为正,也可以为负

list[[index]]

提取多个元素

提取多个不连续的元素

将序号使用{}引起来

list[[{index1, index2, index3}]]
提取多个连续的

Take[list, {begin, end}]

如果后面只有一个数字,如果为正,则表示从头取n个元素,为负,表示从末尾取n个元素。例如Take[list, 10]表示取list的前10个元素

按照一定规则取列表元素

Select[list, crit, n]

选取list中使得crit[ei]为True的前n个元素,n可以不写,表示所有满足条件的元素。

crit一般为匿名函数,使用#来表示列表中的元素,根据#写条件,就可以得到满足条件的元素列表了。匿名函数最后要以&结束。例如:

list = Table[x, {x, 1, 10}]
Select[list, # > 5 &]
; 输出为列表中大于5的元素
{6, 7, 8, 9, 10}

列表属性

列表长度

Length[list]

列表维度

Dimensions[list]

列表操作

列表合并

直接合并(连接多个列表)

Join[list1, list2, ..., n]

最后的n可以不写,写n表示合并每个列表的第n个元素

并集

即合并后将重复值删掉,每个值只保留一份,并会对列表元素进行排序。因此,如果Union里只有一个列表,会对列表进行删除重复值和排序的操作。

Union[list1, list2, ...]

交集

Intersection

补集

Complement[universal,list1,…] 给出在 universal 中,但不在 listi 中的元素的列表

列表的增删改查

以下所有函数用法都差不多,第一项为列表,如果涉及到元素,则第二项为增加的元素或者查找的元素,多个元素则使用列表表示,最后一项为位置,多个位置也是用列表表示。

增加元素

Append[list, element]

AppendTo[list, element] 与append不同的是appendto会将增加元素后的列表赋值进list中

Insert:

PadLeft, PadRight 填充列表

PadLeft[list,len,x] 在 list 的左边用 x 进行填充,产生一个长度为 len 的列表

PadRight[list,len,x] 在 list 的右边进行填充

最后一个应用可以在表达式对应的位置插入元素,pos对应的是深度信息,示例:

in:
Insert[f[a, b, c, d], x, 2]
out:
f[a,x,b,c,d]

in:
1 + x^(a + b) + y^(c + d);
Insert[%, zzz, {3, 2, 3}]
out:
1 + x^(a + b) + y^(c + d + zzz)
删除元素

Delete(删除指定位置的元素)

Drop(删除连续的多个元素)

Rest[list] 去掉 list 的第一个元素

Most[list] 去掉 list 的最后一个元素

修改元素

可以直接对原列表修改,例如

a = {1, 2, 3}
a[[1]] = 4
输出:
{4, 2, 3}

也可以使用函数进行批量修改,为ReplacePart

查找元素

pattern为设置的模式,可以按照模式进行查找

模式匹配是指将FullForm格式相同的元素提取出来,结构相同。关于模式的官方文档:pattern

MemberQ[list, form] 检测form是否为list的元素

FreeQ[list, form] 检测form是否不在list中

重排列表

Sort:

排序函数可以是纯函数,也可以是内置的函数。例如:

Sort[{{a, 2}, {c, 1}, {d, 3}}, #1[[2]] < #2[[2]] &]

SortBy:按函数值排列

Reverse:

RotateLeft[list, n] 把列表 list 元素向左轮换 n 个位置

RotateRight[list, n] 把列表 list 元素向右轮换 n 个位置

Ordering: 返回结果是位置

列表分组

Split

第二个应用很有意思,比如

Gather:与split的不同之处在于Gather没有顺序的要求,而split有顺序的要求,例如对于{1, 1, 2, 2, 1, 2},split后的结果为{{1, 1}, {2, 2}, {1}, {2}},而Gather后的结果为{{1, 1, 1}, {2, 2, 2}}

SplitBy[list,f] 将 list 的参数收集到相同参数的子列表中

GatherBy[list,f] 当应用 f 时,将列表的参数收集到具有相同值的子列表中

加了by就相当于对一个列表经过函数运算后的列表在进行分组或收集

Partition:常用的是前两个

其他操作

统计每个元素的个数(重复值)

Tally[{a, a, b, b, a, c, a}]
out:
{{a, 4}, {b, 2}, {c, 1}}

删除重复值

前面提到过,Union也可以删除重复值,但是会对其重新排序。而DeleteDuplicates不会对其排序

DeleteDuplicatesBy 删除具有相同函数值的元素

DeleteAdjacentDuplicates 用法与DeleteDuplicates相同,但是作用是删除相邻重复值的元素

列表的运算(向量)

在mathematica中,向量也是一个列表

v1 = {1, 2};
v2 = {2, 3};
v1 + v2; (*求和*)
v1 . v2; (*点乘*)
2 v1; (*列表与常数的乘法*)
VectorAngle[v1, v2] (*求两个向量夹角*)
Cross[v1, v2] (*叉乘*)

Inner

考虑两个列表A和B,点积是将两个列表对应的元素相乘后再进行相加运算,其中涉及到了两个列表对应元素的运算,即A[[i]]*B[[i]],又涉及到了将得到的结果再进行运算的过程。考虑将这个过程更加一般化,即第一个运算不再是Times,第二个不再是Plus,而是各种函数,这就是Inner。

Inner[f,list1,list2,g]

Inner的语法如上,对于点积来说,f为Times,g为Plus。它表示将list1和list2对应位置的元素进行f运算,然后将得到的一个序列进行g运算。例如

Inner[Divide, {a, b}, {x, y}, Plus]
out:a/x + b/y

在上例中,首先是进行Divide,得到了a/x, b/y,然后进行Plus,即Plus[a/x, b/y],得到最后的结果。

Outer

Outer是广义外积,相比于Inner的一对一,Outer是一对多。A中的每一个元素都要与B的所有元素进行运算,最后得到一个矩阵。比如:

Outer[f, {a, b}, {x, y, z}]
out:{{f[a, x], f[a, y], f[a, z]}, {f[b, x], f[b, y], f[b, z]}}

其语法为:

对于中间的list,其头部不一定是list,例如:

Outer[g, f[a, b], f[x, y, z]]
out:f[f[g[a, x], g[a, y], g[a, z]], f[g[b, x], g[b, y], g[b, z]]]

矩阵

矩阵就是列表的嵌套,所以对矩阵操作也是对列表操作。

矩阵函数 含义
MatrixForm[s] 以标准的二维矩阵形式显示s
DiagonalMatrix[{a, b, c}] 生成一个3x3的对角阵,对角元素为a,b,c
Inverse[m] 矩阵的逆
MatrixPower[m,n] 矩阵的n次幂
Det[m] 矩阵的行列式
Tr[m] 矩阵的迹
Transpose[m] 矩阵的转置
Eigenvalues[m] 矩阵的特征值
Eigenvectors[m] 矩阵的特征向量

函数作用于列表

Map (/@) — 将函数映射于一个列表: f/@{a,b,c}⟶{f[a],f[b],f[c]}

Apply (@@) — 将函数作用于一个列表: f@@{x,y,z}⟶f[x,y,z]

MapApply (@@@) — 将函数作用于一个列表: f@@@{x,y,z}⟶{f@@x,f@@y,f@@z}

列表中的数学运算

函数 功能
Total[list, n] 求和(n表示深度,可以省略)
Accumulate[list] 逐次求和
Differences[list, n] list的第n阶差分(n可以省略)
Count[list, pattern] 统计匹配模式的元素数量
CountDistinct[list] 统计不同元素的数目
CountDistinctBy
Max/Min[list1, list2, ...] 所有列表中的最大值/最小值
MaxMin[list1, list2, ...] 返回{min, max}
TakeLargest[list,n] 返回前n个最大的
TakeLargestBy[list,f,n]
TakeSmallest
TakeSmallestBy
有问题可以留言哦~ 觉得有帮助也可以投喂一下博主,感谢~
文章链接:https://www.corrain.top/mathematica-2/
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章地址及作者
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
( ゜- ゜)つロ
_(:з」∠)_
(⌒▽⌒)
( ̄▽ ̄)
(=・ω・=)
(*°▽°*)八(*°▽°*)♪
✿ヽ(°▽°)ノ✿
(¦3【▓▓】
눈_눈
(ಡωಡ)
_(≧∇≦」∠)_
━━━∑(゚□゚*川━
(`・ω・´)
( ̄3 ̄)
✧(≖ ◡ ≖✿)
(・∀・)
(〜 ̄△ ̄)〜
→_→
(°∀°)ノ
╮( ̄▽ ̄)╭
( ´_ゝ`)
←_←
(;¬_¬)
(゚Д゚≡゚д゚)!?
( ´・・)ノ(._.`)
Σ(゚д゚;)
Σ(  ̄□ ̄||)<
(´;ω;`)
(/TДT)/
(^・ω・^)
(。・ω・。)
(● ̄(エ) ̄●)
ε=ε=(ノ≧∇≦)ノ
(´・_・`)
(-_-#)
( ̄へ ̄)
( ̄ε(# ̄) Σ
(╯°口°)╯(┴—┴
ヽ(`Д´)ノ
("▔□▔)/
(º﹃º )
(๑>؂<๑)
。゚(゚´Д`)゚。
(∂ω∂)
(┯_┯)
(・ω< )★
( ๑ˊ•̥▵•)੭₎₎
¥ㄟ(´・ᴗ・`)ノ¥
Σ_(꒪ཀ꒪」∠)_
٩(๛ ˘ ³˘)۶❤
(๑‾᷅^‾᷅๑)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
小黄脸
热词系列一
tv_小电视
上一篇
下一篇