楼主: sty1882
27451 8

[问答] 在R语言里 矩阵和矩阵对应元素相乘的问题 [推广有奖]

  • 4关注
  • 0粉丝

硕士生

32%

还不是VIP/贵宾

-

威望
0
论坛币
2558 个
通用积分
0
学术水平
0 点
热心指数
1 点
信用等级
0 点
经验
422 点
帖子
34
精华
0
在线时间
258 小时
注册时间
2009-5-4
最后登录
2022-4-4

10论坛币
两个矩阵点对点相乘 (比如3X3的)。
但是其中一个矩阵的元素是list, 有点像是一个三维数组。 但是我想得到的结果也还是同大小的矩阵,而且每个元素也还是一个list.
有高手知道知道怎么操作吗?
Code是怎么写呢?

多谢!

最佳答案

ntsean 查看完整内容

matrix(lapply(1:length(A), function(i) A*B[]), nrow=nrow(A), ncol=ncol(A))
关键词:对应元素 R语言 list 怎么操作 code 点对点 元素 而且
沙发
ntsean 发表于 2014-1-29 16:57:37 |只看作者 |坛友微信交流群
matrix(lapply(1:length(A), function(i) A[i]*B[[i]]), nrow=nrow(A), ncol=ncol(A))
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
sty1882 + 1 + 1 + 1 精彩帖子

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

使用道具

藤椅
oliyiyi 发表于 2014-1-29 18:15:57 |只看作者 |坛友微信交流群
没明白问题
缺少币币的网友请访问有奖回帖集合
https://bbs.pinggu.org/thread-3990750-1-1.html

使用道具

板凳
sty1882 发表于 2014-1-29 18:28:58 |只看作者 |坛友微信交流群
就是比如
矩阵
A = 1,2
      3, 4

B = C, D
      E, F

但是C, D, E, F 每个元素不是一个单一数字,而是一个list, 比如 C= 5,6,7,8 等 
让矩阵A和B的每个元素对应相乘,1xC, 2XD... 其实C,D等 被乘的又是它包含的每一个元素(数字)。最后得到一个新的含有list 元素的2X2矩阵H。
A*B=
H = X, Y
      Z, K
X,Y ,Z,K 等又是一个个的list.
H 是我想要的结果 

使用道具

报纸
yywan0913 在职认证  发表于 2014-1-29 22:30:27 |只看作者 |坛友微信交流群
  1. function(x,y) list(A[x,y]*unlist(B[x,y]))
复制代码
大概是这样子吧,然后再matrix一下  暂时没完全弄出来 ,明再看下,大过年的还在忙呢你们
不知道是不是你的意思
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
sty1882 + 1 + 1 + 1 精彩帖子

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

是什么给了你自信

使用道具

地板
sty1882 发表于 2014-1-29 23:25:54 |只看作者 |坛友微信交流群
都回家过年了吗?
问题再具体一点 
A <- matrix(c(1,2,3,4), nrow=2, ncol=2)
A

C <- c(1,2,3)
D <- c(2,3,4)
E <- c(3,4,5)
F <- c(4,5,6)
B <- matrix(list(C,D,E,F), nrow=2, ncol=2)
B
求A*B

使用道具

7
sty1882 发表于 2014-1-30 17:51:12 |只看作者 |坛友微信交流群
yywan0913 发表于 2014-1-29 22:30
大概是这样子吧,然后再matrix一下  暂时没完全弄出来 ,明再看下,大过年的还在忙呢你们
不知道是不是你的 ...
多谢了,在国外还得悲催的上班啊 
我读你的代码 感觉应该可以的 是我的意思。但是我试了一下 估计是我哪里写错了。
> A <- matrix(c(1,2,3,4), nrow=2, ncol=2)
> A
     [,1] [,2]
[1,]    1    3
[2,]    2    4
>
> C <- c(1,2,3)
> D <- c(2,3,4)
> E <- c(3,4,5)
> F <- c(4,5,6)
> B <- matrix(list(C,D,E,F), nrow=2, ncol=2)
> B
     [,1]      [,2]     
[1,] Numeric,3 Numeric,3
[2,] Numeric,3 Numeric,3
>
> H <- matrix(function(x,y) list(A[x,y]*unlist(B[x,y])),nrow=nrow(A), ncol=ncol(A))
Error in as.vector(x, mode) :
  cannot coerce type 'closure' to vector of type 'any'
> H
Error: object 'H' not found
>

使用道具

8
sty1882 发表于 2014-1-30 18:10:49 |只看作者 |坛友微信交流群
ntsean 发表于 2014-1-29 23:34
matrix(lapply(1:length(A), function(i) A*B[]), nrow=nrow(A), ncol=ncol(A))
多谢大神!用你的代码可以实现!
就是有些不是很理解 A*B[] 这个部分,按道理应该是表达A的每个元素乘以B的每个对应元素。
B[] 怎么解释呢?

真的感谢大家在大年三十的时间 还在帮我解答问题。
拜年了!

使用道具

9
yywan0913 在职认证  发表于 2014-1-30 19:07:52 |只看作者 |坛友微信交流群
sty1882 发表于 2014-1-30 17:51
多谢了,在国外还得悲催的上班啊 
我读你的代码 感觉应该可以的 是我的意思。但是我试了一下 估计是 ...
  1. f=function(x,y) list(A[x,y]*unlist(B[x,y]))
  2. matrix(c(f(1,1),f(1,2),f(2,1),f(2,2)),nrow=2)
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
sty1882 + 1 + 1 + 1 精彩帖子

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

是什么给了你自信

使用道具

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

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

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

GMT+8, 2024-6-18 23:38