全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
4763 2
2016-11-28
想对一个每列服从均匀分布的矩阵的每一列归一化:
x1 <- matrix(0, 4, 6)
for(j in 1:6){
   x1[, j] <- runif(4, 0, 1)
}
x2<- x1 / colSums(x1)
colSums(x2)
预期得到的结果是[1] 1 1 1 1 1 1
但是却是[1] 0.8067285 0.7996335 1.2654501 1.7015838 1.0351637 1.1075033
这样的随机数

奇怪的是,rowSums就与预期结果相同
x3 <- x1 / rowSums(x1)
rowSums(x3)

结果
[1] 1 1 1 1

太奇怪了,莫非是x / colSums(x)的原理我没搞清?

还望dalao不吝赐教!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2016-11-29 18:34:57
具体原理因为用的没那么多,解释不太清楚,但大致知道问题所在。
问题出在你这个矩阵行列维度不同,所以你在用colSums返回的时候其实就已经是一列数;所以在x1/colSums(x1)的时候,后面的函数是在6个列和之间顺序列方向优先进行计算。
你可以算一下x1/x2,就可以发现你的矩阵应该就是按列顺次显示那些列和。相信看到这些数跟最开始列和对比,就大概能知道是怎么在计算了。
除出来结果应该就是:
0.8067285 1.0351637 1.2654501 0.8067285 1.0351637 1.2654501
0.7996335 1.1075033 1.7015838 0.7996335 1.1075033 1.7015838
1.2654501 0.8067285 1.0351637 1.2654501 0.8067285 1.0351637
1.7015838 0.7996335 1.1075033 1.7015838 0.7996335 1.1075033
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-12-3 15:44:55
prince315 发表于 2016-11-29 18:34
具体原理因为用的没那么多,解释不太清楚,但大致知道问题所在。
问题出在你这个矩阵行列维度不同,所以你 ...
原来是这样的哎,明白了!多谢多谢大神!再一次感受到了R的数据排列方式没有matlab这么符合正常思维&#128514;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群