楼主: waxxyeah
5147 9

[问答] 矩阵提取 [推广有奖]

  • 0关注
  • 0粉丝

高中生

95%

还不是VIP/贵宾

-

威望
0
论坛币
42 个
通用积分
0.1669
学术水平
0 点
热心指数
1 点
信用等级
1 点
经验
226 点
帖子
57
精华
0
在线时间
11 小时
注册时间
2015-3-3
最后登录
2016-4-30

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
有一个matrix和两个vector,比如:
matrix
    1  2  3  4  5  
1  4 -1 -2 -2  0
2 -1  5  0 -2 -3   
3 -2  0  6  1 -3
4 -2 -2  1  6 -3
5  0 -3 -3 -3  9


vector1:1 2 3 4 5 6
vector2:3 4 1 5 2 1

需要让两个vector一一对应取出矩阵的数字,即把matrix[1,3]、[2,4]、[3,1]……这样提出来,但是又不想用for或while这种循环,有什么简便点的方法么?

还有个问题,如果矩阵的header不是数字而是字母,vector也是字母不是数字,这种矩阵要怎么提取?

谢谢~
二维码

扫码加我 拉你入群

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

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

关键词:Vector matrix while Head ect matrix

沙发
syfzxy 发表于 2015-4-11 12:06:44 来自手机 |只看作者 |坛友微信交流群
diag(matrix[vector1,vector2])

使用道具

藤椅
hugebear 发表于 2015-4-11 12:24:05 |只看作者 |坛友微信交流群
你的vector1里面有数字已经越界了。还有你想得到的输出是一个向量么?若是,设你待提取的矩阵名为x, 两个向量为v1, v2 (必须要等长度),以下代码给出所要结果 (楼上的代码似乎有问题):
  1. ind <- cbind(v1, v2)
  2. xind <- x[ind]
复制代码
已有 1 人评分论坛币 收起 理由
admin_kefu + 15 热心帮助其他会员

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

使用道具

板凳
waxxyeah 发表于 2015-4-11 13:10:39 |只看作者 |坛友微信交流群
hugebear 发表于 2015-4-11 12:24
你的vector1里面有数字已经越界了。还有你想得到的输出是一个向量么?若是,设你待提取的矩阵名为x, 两个向 ...
啊举例的时候没注意不好意思
原来这样就可以了,谢谢~~

“如果矩阵的header不是数字而是字母,vector也是字母不是数字,这种矩阵要怎么提取?”这个问题不知道你可以解答么?

使用道具

报纸
waxxyeah 发表于 2015-4-11 13:11:28 |只看作者 |坛友微信交流群
syfzxy 发表于 2015-4-11 12:06
diag(matrix[vector1,vector2])
好像不行呃……thx anyway~

使用道具

地板
syfzxy 发表于 2015-4-11 13:23:06 来自手机 |只看作者 |坛友微信交流群
waxxyeah 发表于 2015-4-11 13:11
好像不行呃……thx anyway~
我试了一下可以的,能告诉我是哪儿的问题吗?一起学习下

使用道具

7
waxxyeah 发表于 2015-4-11 14:38:22 |只看作者 |坛友微信交流群
syfzxy 发表于 2015-4-11 13:23
我试了一下可以的,能告诉我是哪儿的问题吗?一起学习下
Error in diag(matrix[vector1, vector2]) :
  (list) object cannot be coerced to type 'double'

使用道具

8
syfzxy 发表于 2015-4-11 15:14:24 |只看作者 |坛友微信交流群
waxxyeah 发表于 2015-4-11 14:38
Error in diag(matrix[vector1, vector2]) :
  (list) object cannot be coerced to type 'double'
好吧,你那个变量是list,谢谢了

使用道具

9
hugebear 发表于 2015-4-11 21:46:38 |只看作者 |坛友微信交流群
waxxyeah 发表于 2015-4-11 13:10
啊举例的时候没注意不好意思
原来这样就可以了,谢谢~~
只要矩阵的dimnames(想必是你所说的header)和vector所含的字母一致,上述的方法依然有效,举例如下:
  1. > x <- matrix(rnorm(5 * 5), 5, 5)
  2. > dimnames(x) <- list(letters[1:5], letters[1:5])
  3. > v1 <- sample(letters[1:5], size = 6, replace = T)
  4. > v2 <- sample(letters[1:5], size = 6, replace = T)
  5. xind <- cbind(v1, v2)
  6. x[xind]
复制代码

使用道具

10
waxxyeah 发表于 2015-4-12 13:08:16 |只看作者 |坛友微信交流群
hugebear 发表于 2015-4-11 21:46
只要矩阵的dimnames(想必是你所说的header)和vector所含的字母一致,上述的方法依然有效,举例如下:
原来matrix也可以用名字提取的,学习了!谢谢~

使用道具

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

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

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

GMT+8, 2024-5-13 07:06