继续学R:Matrices(矩阵) Part 2,矩阵访问方式&矩阵操作&进阶操作

之前的文章中,我们学习了矩阵的创建、命名行列,以及按下标以及按命名访问。

访问方式的深入探索

尽管我们知道了矩阵的按下标和命名方式访问,但是记得学习列表的时候,访问方式才叫丰富呢!比如说:

mylist<-list('a', 5.2, c(7, 8, 9), 3+4i)
print(mylist[2])
print(mylist[c(1,2)])
print(mylist[c(TRUE, FALSE, TRUE, FALSE)])
print(mylist[c(-1,-2)])

那么不难由此疑问,矩阵是否可以如此操作呢?来试试看吧:

m<-matrix(c(1:12), nrow=3, byrow=TRUE, dimnames=list(c('r1', 'r2', 'r3'), c('c1', 'c2', 'c3', 'c4')))
print(m)
print(m[1, 2]) # 访问第一行第二列上的元素
print(m[c(1,2),c(1,2)]) # 访问第一行和第二行上第一列和第二列元素
print(m[c(TRUE, TRUE, FALSE),c(TRUE, TRUE, FALSE, TRUE)]) # 关闭第三行,关闭第三列,显示其余内容
print(m[-3, -3]) # 关闭第三行,关闭第三列,显示其余内容

矩阵的操作

R - Matrices一文中,介绍了Matrices(矩阵) 的加减乘除(+、-、x、/)运算,也就是说四则运算。R - Matrices说进行这些运算的两个矩阵必须具有相同行数和列数

The dimensions (number of rows and columns) should be same for the matrices involved in the operation.

如果行数列数不一致,进行操作时会提示如下信息:

Error in m1 + m2 : non-conformable arrays

好了,我们来规规矩矩的操作一下,示例如下:

m1<-matrix(c(1:12), nrow=3, byrow=TRUE)
m2<-matrix(c(1:12), nrow=3, byrow=FALSE)
print(m1)
print(m2)
print(m1+m2)
print(m1-m2)
print(m1*m2)
print(m1/m2)

矩阵的操作(进阶)

有朋友在我之前的帖子里回复,说R的矩阵乘法和数学中矩阵的乘法有些不一样。

我看了一下,类似我们本文中介绍的矩阵乘法,把对应元素相乘,其实属于hadamard product(哈达玛积),与之相对的还有kronecker product(克罗内克积,也叫直积或张量积),还有matmul product(一般矩阵乘积),不过具体都是咋回事,我是搞不懂了,感兴趣的自己研究一下吧。

不过R肯定不止简单地支持哈达玛积,否则岂不是弱爆了?然后我搜索了一下R的矩阵操作,然后我和我的小伙伴们都惊呆了。

我就截了一部分,感兴趣的小伙伴自己来学吧:Matrix Algebra,这里列出的只是矩阵强大功能的冰山一角,感兴趣的可以参考文末链接。


好了,今天就到这里。看来学完R Tutorial,不过是学了个皮毛,何况这个还不知道猴年学完呢,😔

相关链接


This page is synchronized from the post: 继续学R:Matrices(矩阵) Part 2,矩阵访问方式&矩阵操作&进阶操作

注意: 请不要登陆 openledger.info\ openledger.io 等站点!!!

今天登陆 openledger.info的博客,看到最新一条消息是提示大家不要访问openledger.info\ openledger.io域名以及相关子域名,原因是他们的域名被黑了(注意,不是DNS劫持,是域名控制权直接到黑客手里了)


(图源 :pixabay)

这就意味着黑客可以搭建一个钓鱼站点,然后把域名指过去,然后设置好SSL证书,然后坐等用户登陆即可。一旦用户登陆openledger相关的交易所,那么账户啊、私钥啊、密码啊,就可以很轻易的被黑客截获,然后如果你账户内资产够多,黑客手速够快(或者程序效率够高),那么除了哇哇大哭,貌似别无他法。

总之,从用户/访客的角度,你看不出任何异常, 然后就上当了,然后钱就没了😭 openledger官方给出的建议是,使用bitshares官网的钱包:https://wallet.bitshares.org。并且对于账户被黑的,建议参考如下链接**修改密码**:https://github.com/bitshares/bitshares-ui/wiki/Cloud-Wallet-Login-and-changing-password

同时,我注意到好多OpenLedger的内盘资产已经禁止交易了,比如在内盘访问Open.EOS、OPEN.ETH、OPEN.BTC、OPEN.STEEM等资产,我们会得到类似如下提示:

  • The owner of OPEN.EOS has disabled trading in this market.
  • The owner of OPEN.ETH has disabled trading in this market.
  • The owner of OPEN.BTC has disabled trading in this market.
  • The owner of OPEN.STEEM has disabled trading in this market.

涉及的OpenLedger的内盘资产有BTC、ETH、EOS、KRM、STEEM、DASH以及 LTC。

按说如果我们没登陆钓鱼站点,没在钓鱼站点输入过账户密码导入过私钥什么的,我们的账户以及账户资产应该是安全的。


(图源 :pixabay)

划重点

  • OpenLedger相关域名落到黑客手中了
  • 先不要登陆openledger.info\ openledger.io等相关域名子域名站点
  • 如果这两天登陆过,那么有被黑的可能,快去修改密码密钥
  • OpenLedger的账户可以在https://wallet.bitshares.org

但愿OpenLedger早点解决这个问题吧。


This page is synchronized from the post: 注意: 请不要登陆 openledger.info\ openledger.io 等站点!!!

继续学R:Matrices(矩阵) Part 1,创建矩阵&命名&访问

在之前的文章中我们学习了R的列表,包括创建列表&命名&访问以及列表的操作,哎,有点想放弃了,我为啥要凑热闹学R呢?就是为了一时好奇😔?啥时候烂尾千万不要意外啊。

这节我们来了解一下R的Matrices(矩阵) 。我理解的矩阵有点像其它语言中的二维数组,里边只能存相同类型的元素。让我们来实际操作见识一下吧。

创建 Matrices(矩阵)

语法

创建矩阵的语法如下:

matrix(data, nrow, ncol, byrow, dimnames)

其中

  • data:作为矩阵数据的向量
  • nrow:指定行数
  • ncol:指定列数
  • byrow:向量元素是否按行排列
  • dimnames:分配给行列的名称

示例

来试一下创建矩阵

m<-matrix(c(1:12), nrow=3, byrow=TRUE)
print(m)


上述代码为我们创建了一个三行四列的矩阵,元素按行排列

创建并命名行列

关于dimnames,这个是给矩阵的行列命名,它必须是一个列表,包含向量组成的行名称以及列名称。列名称可以省略(只命名行),只命名列时行需要指定为NULL。行名称以及列名称的向量数必须和行列数一致。

例如:

m<-matrix(c(1:12), nrow=3, byrow=TRUE, dimnames=list(c('a', 'b', 'c')))
print(m)
m<-matrix(c(1:12), nrow=3, byrow=TRUE, dimnames=list(NULL, c('a', 'b', 'c', 'd')))
print(m)
m<-matrix(c(1:12), nrow=3, byrow=TRUE, dimnames=list(c('a', 'b', 'c'), c('1', '2', '3', '4')))
print(m)

访问矩阵的元素

通过下标访问

不同于其它语言中的二维数组可以用a[i][j]的方式访问矩阵中的元素只可以用诸如a[i, j]的方式访问。

以上边我们生成的矩阵为例,欲访问第二行第三个元素,我们需要使用如下代码:

m<-matrix(c(1:12), nrow=3, byrow=TRUE, dimnames=list(c('a', 'b', 'c'), c('1', '2', '3', '4')))
print(m)
print(m[2, 3])

另外我们可以通过只传入行或者列来读取一整行或者一整列数据,比如说:

m<-matrix(c(1:12), nrow=3, byrow=TRUE, dimnames=list(c(‘r1’, ‘r2’, ‘r3’), c(‘c1’, ‘c2’, ‘c3’, ‘c4’)))
print(m)
print(m[2, ]) # 读取整个第二行
print(m[, 3]) # 读取整个第三列

按命名访问

R - Matrices一文中并未涉及按命名访问,不过我想既然都给起名了,不能按命名访问,岂不是说过不去?

m<-matrix(c(1:12), nrow=3, byrow=TRUE, dimnames=list(c('r1', 'r2', 'r3'), c('c1', 'c2', 'c3', 'c4')))
print(m)
print(m['r3', 'c2' ]) # 读取第三行第二个元素
print(m['r2', ]) # 读取整个第二行
print(m[, 'c3']) # 读取整个第三列


好了,今天就到这吧,下节继续。

相关链接


This page is synchronized from the post: 继续学R:Matrices(矩阵) Part 1,创建矩阵&命名&访问

读书:画图省识春风面

提到杜甫的《咏怀古迹五首》五首,我总把“诸葛大名垂宇宙,宗臣遗像肃清高”与“丞相祠堂何处寻,锦官城外柏森森”弄混,原因当然是因为作者都是杜甫,诗中描写的人物都是诸葛亮了。还好《咏怀古迹其三》写王昭君这首我没和其它的诗词搞混。


(图片来源:百度图片)

说到这首写昭君的诗,我最早接触可以追溯到还在读初中的时候吧,当时语文老师有些“不务正业”,在都照本宣科以及追逐考试成绩和升学率的年代,她搞了个诗词欣赏课,没事给我们讲解一些古诗词,《咏怀古迹其三》就是她课上讲解的诗词之一。后来再次上所谓的诗词赏析课程,就是好多年后的大学选修课了…..

《咏怀古迹其三》全文如下:

群山万壑赴荆门,生长明妃尚有村。
一去紫台连朔漠,独留青冢向黄昏。
画图省识春风面,环佩空归夜月魂。
千载琵琶作胡语,分明怨恨曲中论。

诗中的人物想必大家都很熟悉,没错,就是中国古代四大美女之一的王昭君。四大美女,即西施、王昭君、貂蝉、杨玉环,古人用来沉鱼落雁之容,闭月羞花之貌来形容她们。

其实沉鱼、落雁、闭月、羞花对应四个小故事,比如王昭君对应的是落雁,说得是王昭君出塞途中,坐骑之上,拨动琴弦,然后那些南飞的大雁听到这悦耳的琴声看到这美貌的女子,都忘记了煽动翅膀,纷纷停落下来,所以昭君就得到一个落雁的美名(其实就是大雁杀手啦)

其实什么沉鱼落雁闭月羞花用来形容美女现在都过时啦,时尚点的说法应该是:人见人爱,花见花开,车见车爆胎。 呃,大雁杀手变成了马路杀手。其实还是人家歪果仁委婉一些,比如 Carpenters 的《Close to You》(不过这歌是用来形容帅哥的):

Why do birds suddenly appear
Every time you are near
Just like me they long to be
Close to you
Why do stars fall down from the sky
Every time you walk by
Just like me they long to be
Close to you


(图片来源:百度图片)

好了,那么问题来了,昭君既然这么美,汉元帝怎么会舍得拿来和亲呢?毕竟皇帝都挺好色的😍。其实这里边有个小故事,也就是诗中的画图省识春风面。说的是汉元帝后宫佳丽无数,通通临幸肯定是没那个时间和精力的,不但如此,甚至连看看的时间都没有(忙啊)。

不过没时间看这些后宫佳丽长啥样,还要找貌美的后宫佳丽共度春宵,这矛盾该如何解决呢?也不知道是皇帝聪明还是底下臣子的馊主意,皇帝找了一般画工,把这些后宫佳丽画成图册,然后皇帝翻翻图册,看哪个漂亮就点哪个侍寝。(有没有感觉像去饭店点菜?)

毛延寿就是一个负责这事的画工,然后他就发现这事有操作的余地啊,同样一个女子,我稍微画得好看点和难看点,这命运就可能截然不同,然后再暗示一下这些女子,嗯,财源滚滚啊。

可是有人不信邪,认为自己好看,不用贿赂这些画工,或者有的也没经济实力去贿赂,昭君是两个因素皆有,结果毛延寿一看,你不给我面子是吧,那也别指望我给你面子,然后画画的时候没好好画不说,还在脸上滴落一大滴墨汁像个大痦子。汉元帝一看,这么吓人啊,当然就不会点到昭君了。

等到呼韩邪单于前来向汉元帝请求和亲,昭君(当时叫王嫱)听说这事后主动要求出塞和亲。然后这事敲定下来之后,汉元帝肯定要见一下啊,毕竟要代表国家和亲嘛,这一见,大腿都拍青了,不过作为皇帝金口玉言,说出来的事不好反悔了,不过那么毛延寿的下场就可想而知了。


(图片来源:百度图片)

杜甫的诗,通篇都是为昭君打抱不平,不过其实我看出塞对昭君而言,比在宫里孤老强百倍了。就像李商隐的《宫辞》中描述的,这后宫不好混呀。

君恩如水向东流,得宠忧移失宠愁。
莫向尊前奏花落,凉风只在殿西头。


This page is synchronized from the post: 读书:画图省识春风面

继续学R:List(列表) Part 2, 列表的操作

上一篇文章中,我们学习了列表的创建、列表元素命名以及按照下标以及命名等方式访问列表。在上一篇文章的结尾,我们还留了一个实践题,给列表元素赋予相同的命名会是什么效果?这个大家测试了没有啊?

这节我们来继续学习列表。

列表的操作

追加元素

首先,我们来了解一下追加元素

mylist<-list('a', 5.2, c(7, 8, 9), 3+4i)
mylist[5]<-"hahaha"
print(mylist)


我们成功地在末尾追加了一个新元素

mylist<-list('a', 5.2, c(7, 8, 9), 3+4i)
mylist[8]<-"hahaha"
print(mylist)
print(length(mylist))


通过这个例子,我们可以看出,可以在末尾之后的任意位置追加元素,中间元素填空值。

更新元素

mylist<-list('a', 5.2, c(7, 8, 9), 3+4i)
mylist[2]<-"hahaha"
print(mylist)


所谓的更新元素就是给元素赋个新值,这个倒是非常好理解。

删除元素

mylist<-list('a', 5.2, c(7, 8, 9), 3+4i)
mylist[4]<-NULL
print(mylist)


咦,第四个元素不见了,果然被删除鸟。

R - Lists,这篇文章中说:

We can add and delete elements only at the end of a list.

果真如此吗?其实添加元素一节我们已经证实了,可以在list末尾之后任意位置增加,那么来试试删除吧。

mylist<-list('a', 5.2, c(7, 8, 9), 3+4i)
mylist[1]<-NULL
print(mylist)


也就是说除了删除尾部元素,我们还可以删除头部元素。

mylist<-list('a', 5.2, c(7, 8, 9), 3+4i)
mylist[2]<-NULL
print(mylist)


看这个结果,貌似我们可以删除任意位置的元素啊。

不过有些搞不懂,下边例子中产生的NULL元素,和赋值NULL的元素有什么区别了,为什么下边例子中的空元素没有被清理掉呢?

mylist<-list('a', 5.2, c(7, 8, 9), 3+4i)
mylist[8]<-"hahaha"
print(mylist)
print(length(mylist))

合并列表

合并列表就是把两个列表合二为一了,使用c()函数,这个c()函数真是万能啊。

mylist<-list('a', 5.2, c(7, 8, 9), 3+4i)
mylist2<-list("hahaha", "oflyhigh", "steemit")
print(c(mylist, mylist2))

这个好像也没啥好说的。

将列表转换成向量

有时候为了对列表里的元素进行进一步的操作,我们需要将列表转换成向量,使用unlist()函数就可以啦。

mylist<-list('a', 5.2, c(7, 8, 9), 3+4i)
print(unlist(mylist))


是不是很简单,需要注意的是,列表支持同时存储不同类型元素,而多元素向量只能存储一种类型,那么当包含多种类型元素的列表转换成多元素向量,类型是如何变化的呢?

这个可以参考继续学R:Vector(向量) Part 1, 多元素向量创建&类型,我总结的规律是:

raw > logical > integer >numeric >complex > character


好了,关于列表,我们就水到这里了,下节再继续水别的内容。说实话,有点枯燥呢,不过打游戏不枯燥,但是那样我们也学不到啥东西啊。

相关链接


This page is synchronized from the post: 继续学R:List(列表) Part 2, 列表的操作

儿童节福利,发棒棒糖啦

今天朋友圈被一幅图刷屏,是有关儿童节的,题词是:愿你走遍万千世界,归来仍是纯真少年。


(图源 :pixabay)

多感人的句子啊,一下子击中心中最柔软的部分了。然鹅,到了微信群里,画风一下子就变了,比如有人说:“怎么可能呢?饭都白吃了?”;又有人说:“祝别人都是纯真少年,自己好泡妞赚钱?”😭

好吧,我们终归是成熟了,想必是纯真再也纯真不起来了。很多时候,多想像小孩子一样无忧无虑啊,吃睡玩(额,这是小孩子还是小猪)。或许现在小孩也压力很大,比如说要做很多作业,要上很多补习班,要参加很多课外活动,但是至少有大人为他们遮风挡雨啊。

而我们,风也罢,雨也罢,只能自己面对自己抗,不管前路是泥泞还是遍布荆棘,除了前行在前行,我们没得选择。只因为我们是成人,我们要为家庭和孩子扛起重担,要为他们撑起一片晴空。

你是否想过要是能回到童年多好啊?你是否想过自己真的不想长大?有没有想过弄一个棒棒糖慢慢地品味一下,找回一下童年的滋味?


(图源 :pixabay)

那么别想啦,机会来啦,回帖用一句话说明你还是个孩子,就有可能获得棒棒糖奖励(价值0.2-0.5SBD的点赞)

规则

  • 用一句话说明你还是个孩子
  • 每人限一条回复,多回无效
  • 回复与主题无关的内容无效
  • 时间截至北京时间6月1日24时
  • 点赞金额为点赞时显示的SBD金额(不保证增值或者贬值)

这个金额估计买个棒棒糖足够啦,别嫌少哦,就是热闹一下😀


This page is synchronized from the post: 儿童节福利,发棒棒糖啦

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×