楼主: kiotoqq
2240 8

[问答] [R]怎样用for或者while写matrices的程序 [推广有奖]

  • 0关注
  • 0粉丝

本科生

22%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
488 点
帖子
47
精华
0
在线时间
61 小时
注册时间
2010-12-16
最后登录
2014-10-28

楼主
kiotoqq 发表于 2013-6-11 19:00:59 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我有两个matrices,A和B:
Bildschirmfoto 2013-06-11 um 00.46.16.png

还有它们的乘积C=A*B:
Bildschirmfoto 2013-06-11 um 00.46.26.png

怎样写一个用for或者while的含有A和B作为argument的function来return他们的乘积C?如果那两个matrices的dimension不兼容那么就要return一个error。

求大师们帮帮忙!小女会感激不尽!
二维码

扫码加我 拉你入群

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

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

关键词:Matrices matrice matric while Rice 程序

沙发
wxylzh 发表于 2013-6-11 20:00:36
你就是要矩阵对应元素的乘积,看你要在什么软件中实现,在matlab中是C=A.*B即可。

藤椅
Ben910128 发表于 2013-6-11 21:57:10
我也刚开始学习R,似乎这样就能解决你的问题了,希望对你能有所帮住。
  1. Matrix.mul <- function(A, B)
  2. {
  3.     if(is.matrix(A) == FALSE | is.matrix(B) == FALSE )
  4.       {
  5.        print("error")  
  6.        }
  7.     else if ( dim(A)[1] != dim(B)[2])
  8.       {
  9.        print("error")
  10.       }   
  11.     else
  12.       {
  13.        C <- A %*% B  
  14.        print(C)
  15.       }

  16. }
复制代码

板凳
kaifengedu 发表于 2013-6-11 22:01:06
不用循环,%*%可以的

报纸
kiotoqq 发表于 2013-6-11 23:04:21
Ben910128 发表于 2013-6-11 21:57
我也刚开始学习R,似乎这样就能解决你的问题了,希望对你能有所帮住。
谢谢!用if的我已经有了,现在就是要求要用while或者for,我真是一点头绪都没有啊

地板
Ben910128 发表于 2013-6-12 01:05:39
kiotoqq 发表于 2013-6-11 23:04
谢谢!用if的我已经有了,现在就是要求要用while或者for,我真是一点头绪都没有啊
没有用if, 但是同时用了while 和 for 不知道是否符合楼主的意思。用while 进行判断,用for 进行循环赋值。
  1. Matrix.mul <- function(A, B)
  2. {
  3.     while(is.matrix(A) == FALSE | is.matrix(B) == FALSE )
  4.          {print("error")
  5.           break}
  6.     while(is.matrix(A) == T & is.matrix(B) == T)
  7.          {
  8.           n <- dim(A)[1]; m <- dim(A)[2];
  9.           p <- dim(B)[1]; q <- dim(B)[2];
  10.           while(m == p)
  11.                {
  12.                 for(s in 1:n)
  13.                    {
  14.                     for(t in 1:q)  C[s,t] <- A[s, ] %*% B [, t]
  15.                    }
  16.                 print(C)
  17.                 break  
  18.                 }
  19.           while(m != p)
  20.                {
  21.                 print("error")
  22.                 break
  23.                 }
  24.           break
  25.           }
  26. }
复制代码
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
kiotoqq + 1 + 1 + 1 热心帮助其他会员
qoiqpwqr + 10 + 1 热心帮助其他会员

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

7
kiotoqq 发表于 2013-6-12 05:12:36
Ben910128 发表于 2013-6-12 01:05
没有用if, 但是同时用了while 和 for 不知道是否符合楼主的意思。用while 进行判断,用for 进行循环赋值 ...
太谢谢啦!再问下,如果有这个条件:
Bildschirmfoto 2013-06-11 um 22.57.31.png

程序要怎么改呢

8
Ben910128 发表于 2013-6-12 13:48:04
kiotoqq 发表于 2013-6-12 05:12
太谢谢啦!再问下,如果有这个条件:
这样应该就可以了吧。但是这个程序有个问题,就是最后输出的虽然看上去是一个矩阵,但是用is.matrix()检验的时候是FALSE,说明不是矩阵。修改了很久也没修改好,我也不知道问题出在哪里。最后我想,如果要调用的话,那就用as.matrix()转换一下吧。
  1. Matrix.mul <- function(A, B)
  2. {
  3.     while(is.matrix(A) == FALSE | is.matrix(B) == FALSE )
  4.          {print("error")
  5.           break}
  6.     while(is.matrix(A) == T & is.matrix(B) == T)
  7.          {
  8.           n <- dim(A)[1]; m <- dim(A)[2];
  9.           p <- dim(B)[1]; q <- dim(B)[2];
  10.           while(m == p)
  11.                {
  12.                 C <- matrix(0, nrow = n , ncol = q)
  13.                 for(s in 1:n)
  14.                    {
  15.                     for(t in 1:q)  
  16.                        {
  17.                         c <- array(0, dim = m )
  18.                         for(k in 1:m)
  19.                            {
  20.                             c[k] <- A[s,k] * B[k, t]                        
  21.                             }
  22.                         C[s, t] <- sum(c)
  23.                        }
  24.                    }
  25.                 print(C)
  26.                 break  
  27.                 }
  28.           while(m != p)
  29.                {
  30.                 print("error")
  31.                 break
  32.                 }
  33.           break
  34.           }
  35. }
复制代码

9
kiotoqq 发表于 2013-6-13 14:31:56
Ben910128 发表于 2013-6-12 13:48
这样应该就可以了吧。但是这个程序有个问题,就是最后输出的虽然看上去是一个矩阵,但是用is.matrix()检验 ...
谢啦!我研究研究看。。。

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

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