矩阵在Mata中的输入和运算

2017-10-11 高金凤 爬虫俱乐部 爬虫俱乐部

快~关注这个公众号~一起涨姿势~

有问题,不要怕!点击推文底部“阅读原文”下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱statatraining@163.com,我们会及时为您解答哟~

往期推文《初识MATA》中我们介绍到,Stata中因Mata语言的增加,极大地简化了处理复杂数据的能力。Stata在使用矩阵时会占用大量的内存, Stata MP版本中矩阵命令最多只能处理不超过11000行/列的矩阵,因此,很多大数据不能利用传统的Stata矩阵命令进行处理。正如下面例子所示:

clear all

mat A=(2,6,1\3,10,12\2,9,5)

memory

mata

mata clear    //清空mata内存

A=(2,6,1\3,10,12\2,9,5)

mata memory   //查看mata内存

end

我们分别在Stata和Mata中输入两个相同的矩阵,结果如下:

发现Mata中矩阵所占用的内存远小于Stata所占用的内存。今天推文先主要给大家介绍在Mata手动输入矩阵以及它的一些运算

一、 矩阵的输入

Mata环境中,矩阵的输入以英文状态的“,”分隔各列,以“/”分隔各行。矩阵的每一个元素可以是实数、复数以及字符串。需要说明的是数字和字符串不能放在同一个矩阵中,并且字符型矩阵和数值型矩阵不能互相进行相关代数运算。

举例一:

mata

A1=(1,2,-1\3,4,-2+3i\2,5,6)

A2=(-2,1,-2\1,-2,3-1i+3i\3,6,-1)

A3=(A1,A2)   //矩阵的横向拼接

A3

A4=(A1\A2)   //矩阵的纵向拼接

A4

end

:矩阵的横向拼接,要求所合并的矩阵行数相等;矩阵的纵向拼接,要求所合并的矩阵列数相等

限于篇幅,只展示部分结果如下:

举例二:

mata

B1=("爬虫俱乐部"\"将爬虫进行到底"\"number one")

B2=("大数据分析"\"大数据挖掘"\"团队")

B3=("1"\"2"\"3")

B4=(B1,B2,B3)   //矩阵的横向拼接

B4

B5=(B1\B2\B3)   //矩阵的纵向拼接

B5

end

结果如下:

二、 矩阵的下标

Mata矩阵的下标分为列表下标和范围下标。对于列表下标,我们可以用诸如x[i,j]的形式来表示单个元素,x表示行,j表示列,当然i和j也可以是一个向量。同样读者也可以用范围下标来表示连续的元素,范围下标有两种表示方法,一种是“::”,另一种是“||”。具体用法看下面的例子:

mata

C1=A1[1,2]  //提取矩阵A1的第一行第二列的观测值

C1

C2=A1[1,.]  //提取矩阵A1的第一行的所有列的子矩阵

C2

C3=A1[.,.]  //提取矩阵A1的所有行的所有列的矩阵

C3

C4=A1[1,(1,3)]  //提取矩阵A1的第一行第一、三列的子矩阵

C4

C5=A3[1,(1::3)]  //提取矩阵A3的第一行第一、二、三列的子矩阵

C5

C6=A3[(1::2),(4::6)]  //提取矩阵A3的第一、二行,第四、五、六列的子矩阵

C6

C7=A3[|1,4 \ 2,6|]  //提取矩阵A3的第一行第四列到第二行第六列的子矩阵

C7

end

限于篇幅,此处展示部分结果如下:

三、矩阵的运算

1、 转置运算符

mata

D1=A1'   //矩阵A1的转置

D2=C3'A1   //矩阵C3的转置与矩阵A1的乘积

D2    

D3=(C4',C6)  //横向拼接

D3

D4=(C5',C6')   

D4

end

部分结果如下:

2、 代数运算符

常见的矩阵代数运算有矩阵加减、矩阵相乘、数乘(矩阵乘以常数)以及矩阵A除以常数K 。

mata

E1=A1+A2   //矩阵相加

E1

E2=A1*A2   //矩阵相乘

E2

E3=A1*12   //数乘

E3

E4=A2/2   //矩阵除以常数

E4

E5=A1'+A2'   //矩阵转置相加

E5

end

:与矩阵的正常计算一样,在Mata中两个具有相同结构的矩阵才能进行加减运算;第一个矩阵的行等于第二个矩阵的列相等才能进行两个矩阵间的乘除运算。

部分结果如下:

3、 冒号运算符

当使用冒号(“:”)的时候,包括加 (“+”)、减 (“-”)、乘 (“*”)、除(“/”)在内的代数运算符可以被用于元素对元素的运算。这些运算符可以用在结构相同的矩阵,也可以用于不同结构的矩阵,需要注意的是这里的不同结构指的是满足同行数或同列数的向量才可进行运算。举例如下:

mata

F1= (5, 0 \ 0, 2 \ 3, 8)

F2= (1, 3 \ 5, 1 \ 3, 2)

F3=F1:*F2   //矩阵元素相乘

F3

F4=F1:+F2   //矩阵元素相加

F4

F5=F1:/F2   //矩阵元素相除

F5

F6=F1:-F2  //矩阵元素相减

F6

end

部分结果如下所示:

               

4、 逻辑与关系运算符

mata

G1=(!F1)  //矩阵F1中的元素是否非零

G1

G2=(F1==F2')  //判断矩阵F1所有元素是否和F2转置矩阵的所有元素相等

G2

       G3=(F1!=F2' )  //判断矩阵F1是否与F2的转置矩阵有不相等的元素

G3

G4=(F1>=F2)  //判断矩阵F1的所有元素是否大于等于矩阵F2的所有元素

G4

G5=(F1[2,1]=0 )  //判断矩阵F1的第二行第一列元素是否为0

G5

end

结果如下:

 

  

(1) 逻辑运算符“!”可以用于标量、向量和矩阵,并在各元素相应的位置上返回0或1,其它的逻辑运算符(“&”,“|”)只能用于标量。

(2) 关系运算符“!=”可以用于不同结构的向量和矩阵,其它的关系运算符(“>”,“>=”,“<”,“<=”)仅能用于相同结构且具有相同数据类型(字符型或数值型)的矩阵,返回0或1。

如下所示:

       可以看到,因为矩阵F1和矩阵F2转置的结构不同,所以Stata报错。

以上都是在Mata环境中手动输入矩阵及其简单运算,如果我们想要修改矩阵的行列名称、生成矩阵的逆矩阵以及生成一些特殊矩阵等,就需要用到一些Mata函数,在后面的推文我们会继续介绍哟。

看不懂的记得戳下方视频哦~



    注:此推文中的图片及封面(除操作部分的)均来源于网络!如有雷同纯属巧合!

       以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。另外,我们开通了苹果手机打赏通道,只要扫描下方的二维码,就可以打赏啦!

应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~

                     文字编辑:王    悦

技术总编:刘贝贝



往期推文推荐:

1.高校学术大神:你的导师上榜了吗?

2.中国高校财经、管理与综合类期刊灌水排行榜

3.命令sum2docx输出统计量表到docx文件

4.reg2docx报告你的实证结果吧!

5.爬虫俱乐部又出新命令了——wordconvert转换你的word文件

6.putdocx+wordconvert—将实证结果输出到Word.docx)文档

7.Stata 15Markdown——没有做不到,只有想不到!

8.矩阵和宏的故事

9.shelloutopen anything

10.Putpdf--神奇的转换工具



关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:statatraining@163.com

投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

欢迎关注爬虫俱乐部

微信扫一扫
关注该公众号