楼主: tsundere_rather
4148 9

[问答] 矩阵或者数组中数位置的问题 [推广有奖]

  • 0关注
  • 0粉丝

已卖:1份资源

大专生

60%

还不是VIP/贵宾

-

威望
0
论坛币
31 个
通用积分
0.0031
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
443 点
帖子
21
精华
0
在线时间
70 小时
注册时间
2014-7-4
最后登录
2019-10-30

楼主
tsundere_rather 发表于 2015-8-24 17:01:51 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
比如,r语言矩阵或者数组中最大10个数的位置怎么可以得到?
二维码

扫码加我 拉你入群

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

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

关键词:R语言

沙发
ntsean 发表于 2015-8-25 00:06:22
arrayInd(which(order(x, decreasing = TRUE) <= 10), dim(x))
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
admin_kefu + 10 + 1 + 1 + 1 热心帮助其他会员

总评分: 论坛币 + 10  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

藤椅
tsundere_rather 发表于 2015-8-25 11:06:36
ntsean 发表于 2015-8-25 00:06
arrayInd(which(order(x, decreasing = TRUE)
谢谢,非常感谢

板凳
hongweigg 发表于 2015-8-25 17:56:52
楼上提供的方法好像有问题,楼主问的是,最大10的数的索引(位置),可先按降序排序,得到索引号,然后将前10个取出即可。
建议方法:
order(x,decreasing=TRUE)[1:10]

过程详解:
1、测试数据x

> x
[1] 0.00 0.00 0.00 0.00 0.00 0.00 0.06 0.09 0.20 0.09 0.08 0.14 0.14 0.23
[15] 0.08 0.06 0.12 0.20 0.14 0.11 0.20 0.14 0.17 0.15 0.18 0.15 0.20 0.12
[29] 0.23 0.08 0.12 0.08 0.23 0.12 0.08 0.17 0.18 0.17 0.12 0.17 0.14 0.18
[43] 0.11 0.27 0.06

2、按降序排序

> order(x,decreasing=TRUE)
[1] 44 14 29 33  9 18 21 27 25 37 42 23 36 38 40 24 26 12 13 19 22 41 17 28
[25] 31 34 39 20 43  8 10 11 15 30 32 35  7 16 45  1  2  3  4  5  6
>

3、这里就能取出最大10个数的索引了
> order(x,decreasing=TRUE)[1:10]
[1] 44 14 29 33  9 18 21 27 25 37

4、可以看一下,这取出的10个数的索引是不是指向最大的十个数。
> x[order(x,decreasing=TRUE)[1:10]]
[1] 0.27 0.23 0.23 0.23 0.20 0.20 0.20 0.20 0.18 0.18

已有 1 人评分论坛币 收起 理由
admin_kefu + 20 热心帮助其他会员

总评分: 论坛币 + 20   查看全部评分

报纸
ntsean 发表于 2015-8-26 09:57:24
hongweigg 发表于 2015-8-25 17:56
楼上提供的方法好像有问题,楼主问的是,最大10的数的索引(位置),可先按降序排序,得到索引号,然后将前 ...
楼主问的是矩阵,所以要提供行列,你的方法是当作向量做

地板
asdasdaseee 发表于 2015-8-26 14:38:15
类似2楼的,可以用sort.list
arrayInd(sort.list(A,decreasing=T)[1:10],dim(A))

7
hongweigg 发表于 2015-8-27 00:38:35
ntsean 发表于 2015-8-26 09:57
楼主问的是矩阵,所以要提供行列,你的方法是当作向量做
您好,我不是怀疑您在选用函数上有问题,是算法上可能存在问题,看下面的测试结果:
> y
      [,1] [,2] [,3] [,4] [,5]
[1,] 0.00 0.09 0.14 0.12 0.18
[2,] 0.00 0.08 0.11 0.23 0.17
[3,] 0.00 0.14 0.20 0.08 0.12
[4,] 0.00 0.14 0.14 0.12 0.17
[5,] 0.00 0.23 0.17 0.08 0.14
[6,] 0.00 0.08 0.15 0.23 0.18
[7,] 0.06 0.06 0.18 0.12 0.11
[8,] 0.09 0.12 0.15 0.08 0.27
[9,] 0.20 0.20 0.20 0.17 0.06

> arrayInd(which(order(y, decreasing = TRUE) <= 10), dim(y))
      [,1] [,2]
[1,]    5    1
[2,]    3    4
[3,]    4    4
[4,]    1    5
[5,]    4    5
[6,]    5    5
[7,]    6    5
[8,]    7    5
[9,]    8    5
[10,]    9    5

asdasdaseee结果是正确的:
> arrayInd(sort.list(y,decreasing=T)[1:10],dim(y))
      [,1] [,2]
[1,]    8    5
[2,]    5    2
[3,]    2    4
[4,]    6    4
[5,]    9    1
[6,]    9    2
[7,]    3    3
[8,]    9    3
[9,]    7    3
[10,]    1    5

which(order(y, decreasing = TRUE) <= 10)含义是先将数据进行排序,然后取索引小于等于10的,最大的10个数在排完序后,索引不应是<=10,而是排在前10位的就是最大的10个数的索引。
可以这样写:
> arrayInd(order(y,decreasing=TRUE)[1:10],dim(y))
      [,1] [,2]
[1,]    8    5
[2,]    5    2
[3,]    2    4
[4,]    6    4
[5,]    9    1
[6,]    9    2
[7,]    3    3
[8,]    9    3
[9,]    7    3
[10,]    1    5

8
ntsean 发表于 2015-8-27 03:53:01
hongweigg 发表于 2015-8-27 00:38
您好,我不是怀疑您在选用函数上有问题,是算法上可能存在问题,看下面的测试结果:
> y
      [,1] [, ...
明白你的意思了,就是要sort好的top 10

取决楼主需要什么,应该都不难得到

9
a443115637 发表于 2015-8-27 12:58:04
学习一下。。

10
杰奏范特西 发表于 2017-4-19 11:52:48
ntsean 发表于 2015-8-25 00:06
arrayInd(which(order(x, decreasing = TRUE)
我也觉得貌似有点问题,
arrayInd(which(x>=sort(x,T)[10]),dim(x))更简洁明了

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-30 20:34