楼主: 任潇潇
1017 3

[学习分享] 矩阵抽样 [推广有奖]

  • 0关注
  • 0粉丝

本科生

20%

还不是VIP/贵宾

-

威望
0
论坛币
444 个
通用积分
14.4171
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
497 点
帖子
36
精华
0
在线时间
85 小时
注册时间
2019-12-17
最后登录
2024-5-22

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
set.seed(123)
a=rnorm(1000)
y=matrix(a,100,10)#将随机数列转化为100行10列的矩阵
S=apply(abs(y),1,sum)#计算每一行元素的绝对值之和
R=order(S,decreasing=TRUE)#排序,显示结果为元素位于的行号
#用一个函数操作
topK <- function (x,k) {
  if (k <= dim(x)[1]) x[which(rank(apply(abs(x),1,sum))>(dim(x)[1]-k)),]
  else
    print("Err: the specified k is out of matrix dimension")
}

set.seed(123)
x<-matrix(rnorm(1000),100)

topK(x,10) #提取矩阵x按行和排列前 k=10 子矩阵
同样都是按行和由大到小的顺序抽取一部分矩阵的行,为什么上面的代码显示第49行的行和最大,而用函数操作,显示矩阵中第8行行和最大呢,请各位大神帮帮忙。

二维码

扫码加我 拉你入群

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

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

关键词:Decreasing easing matrix apply Order

本帖被以下文库推荐

沙发
llb_321 在职认证  发表于 2020-12-24 10:32:21 |只看作者 |坛友微信交流群
比较一下吧
  1. sort(c(30,20,50,70,10))
  2. #[1] 10 20 30 50 70 这是把上面的向量按增序重新排列

  3. order(c(30,20,50,70,10))
  4. #[1] 5 2 1 3 4 这是上面排序后的各元素在原来的向量中的位置

  5. rank(c(30,20,50,70,10))
  6. #[1] 3 2 4 5 1 这是向量各元素的排序

  7. #如果需要找出到底哪个最大
  8. which.max(c(30,20,50,70,10))
  9. #[1] 4

  10. #clear?
复制代码

使用道具

藤椅
任潇潇 发表于 2020-12-24 15:07:04 |只看作者 |坛友微信交流群
llb_321 发表于 2020-12-24 10:32
比较一下吧
老师您好,我知道这两个函数不一样,我想用order函数验证一下我抽出来的行对不对,但用order排出来第49行元素行和最大,用下面的函数抽出来的行和最大行和原矩阵对比,显示原矩阵的第8行。

使用道具

板凳
llb_321 在职认证  发表于 2020-12-24 15:40:42 |只看作者 |坛友微信交流群
任潇潇 发表于 2020-12-24 15:07
老师您好,我知道这两个函数不一样,我想用order函数验证一下我抽出来的行对不对,但用order排出来第49行 ...
我不是什么老师 只是来玩的
可以把代码拆开来 一个一个地过一下 看看每一步的结果
也可以手算一下 看看该用order还是rank
上面的which.max也可以查看哪个最大

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-28 04:02