R语言系列9 | 变量类型8-矩阵运算 矩阵维度以及矩阵转向量

“ 矩阵是一种非常优秀的数学工具,他具有多种运算方式;而矩阵最大的特征就是矩阵的维度;对于任何一个矩阵,它都可以转化为向量。”

关于R语言全系列文章,都会放在这里,按照向量,矩阵,数据框,因子,编程结构以及函数,数据处理的过程

在有了对矩阵的初步学习的基础上,我们就可以来进行矩阵的进一步学习了,上文讲解了关于矩阵的创建,矩阵的索引以及矩阵的行列进行修改和删除,

在这一篇文章中,我们将要学习关于矩阵的更深一步的应用,即获取矩阵的维度,然后对矩阵进行运算,以及如何化简矩阵为向量。这三个操作都是日常使用中非常实用的操作,大家肯定会经常使用到的。矩阵的运算就包括了我们日常所使用的矩阵的点乘,叉乘,加减等等运算。而取维度更是很常用,因为获取维度以后我么就可以进行很多更高阶的运算了。而最后的矩阵转向量的操作更是关键,我曾经因为R没有打平操作而爆喷了一波R,后来发现只是我没找到怎么操作而已。。。。。

矩阵的维度获取

矩阵的维度获取其实非常的简单粗暴,正如同我们过去学的很多粗暴函数一样,它的获取是直接使用函数dim。

> m1 <- matrix(1:9,
+              nrow = 3,
+              ncol = 3)
> dim(m1)
[1] 3 3

是不是非常的简单粗暴呢?

再给大家整一个不是方阵的

> m2 <- matrix(1:10,
+              nrow = 2,
+              ncol = 5)
> dim(m2)
[1] 2 5

这里要记住,返回的值第一个是行,第二个是列,别记错了,后面使用的时候出问题。

这里还有一个问题,我们返回是dim值是一个向量,我们可以把它保存起来,方便后面多次使用

dm2 <-dim(m2)
dm2

我们的dm2是一个int类型的向量,使用的时候直接dm2[1]就可以取到行数,使用dm[2]就可以取到列数了。

矩阵转向量

介绍完了如何获取矩阵的行数和列数,我们来谈谈如何把矩阵转化为向量的操作。这个操作是因为曾经有一个问题急需矩阵打平转化为向量,我由于前面的工作都是R做的,没办法转向numpy去操作。于是我谷歌了一下R的flatten函数,结果发现它居然居然居然没有。

当时我那是一个气愤啊,索性用循环写了。你们可以想想,一个差不多五万乘五万的矩阵,给一行一行的打平,用的还是c(.. , ..)的方式,这在内存里得复制多少次啊。后来喝了一杯枸杞水才运行完。。。。

再后面,我找了很多资料也没找到,直到有一天看书,机缘巧合之下,我找到了下面的方法,直接打平矩阵到向量,不需要磨磨唧唧的循环

> c(m2)
 [1]  1  2  3  4  5  6  7  8  9 10

带劲吗?就是这么简单,不需要任何花里胡哨的技巧,直接打平。

如果你说我不想按照列给它打平,我想按照行打平,那你是不是就得写循环了呢?其实也不用,我们都知道矩阵有个转置操作

> c(t(m2))
 [1]  1  3  5  7  9  2  4  6  8 10

是不是非常简单呢,只需要c一下,矩阵就被打平了!!!

矩阵运算

最后,我们来讲解一下矩阵的运算。矩阵的运算方式多种多样,而我们日常中使用最多的,莫过于基本的数值运算,矩阵乘法以及矩阵的转置操作。

第一个先将矩阵的转置,非常简单,就是行列互换,或者 [x,y] -> [y,x]

使用函数 t()

# 转置
> m2
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    3    5    7    9
[2,]    2    4    6    8   10
> t(m2)
     [,1] [,2]
[1,]    1    2
[2,]    3    4
[3,]    5    6
[4,]    7    8
[5,]    9   10

方阵转置也是一样的,而且更容易看一些

> m1
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
> t(m1)
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9

第二个运算就是基本的数字运算,加减法

> m3 <- matrix(2:10,3)
> m3-m1
     [,1] [,2] [,3]
[1,]    1    1    1
[2,]    1    1    1
[3,]    1    1    1
> m3 + m1
     [,1] [,2] [,3]
[1,]    3    9   15
[2,]    5   11   17
[3,]    7   13   19

注意,使用矩阵之间运算,你一定要使用维度相同的,不然R会为难的报错

> m2 + m3
Error in m2 + m3 : non-conformable arrays

还有一点,矩阵也具有循环补齐机制,大家理解为np的广播机制就可以了

> m3 + 1
     [,1] [,2] [,3]
[1,]    3    6    9
[2,]    4    7   10
[3,]    5    8   11
> m3 + c(1,2,3)
     [,1] [,2] [,3]
[1,]    3    6    9
[2,]    5    8   11
[3,]    7   10   13

如果你忘记了什么是循环补齐,请看

最后,就是矩阵乘法了,非常的简单,学过线代都懂,前面找行,后面找列

> m3 %*% m1
     [,1] [,2] [,3]
[1,]   36   81  126
[2,]   42   96  150
[3,]   48  111  174

注意这里使用的符号是 %*% !!!

直接使用乘号则是普通的 x 乘

> m3 * m1
     [,1] [,2] [,3]
[1,]    2   20   56
[2,]    6   30   72
[3,]   12   42   90

本文的内容就到这里结束了,这篇文章讲解了关于R语言矩阵的大部分运算内容,关于矩阵的维度,矩阵的线性代数运算以及如何把矩阵转化为向量的问题。其中,把矩阵转化为向量是个非常关键的内容,一定要万分注意!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,392评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,258评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,417评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,992评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,930评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,199评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,652评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,327评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,463评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,382评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,432评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,118评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,704评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,787评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,999评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,476评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,057评论 2 341

推荐阅读更多精彩内容