楼主: 二胡小子
4795 2

[问答] R语言利用colSums做归一化和预期结果不同 [推广有奖]

  • 0关注
  • 0粉丝

本科生

80%

还不是VIP/贵宾

-

威望
0
论坛币
79 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
2649 点
帖子
39
精华
0
在线时间
91 小时
注册时间
2013-3-12
最后登录
2017-8-29

楼主
二胡小子 发表于 2016-11-28 22:31:42 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
想对一个每列服从均匀分布的矩阵的每一列归一化:
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不吝赐教!
二维码

扫码加我 拉你入群

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

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

关键词:Sums 结果不同 Sum R语言 OLS matrix

沙发
prince315 在职认证  发表于 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;

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-6 03:09