全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
10490 22
2012-07-08
matlab,SAS iml 矩阵运算

鉴于网上一直没有将二者对照分析的资料;

本文旨在对照给出matlab与SAS iml 中一些常用的矩阵运算,并给出实例,指出二者的异同;

最简单的矩阵定义,本文并未给出,大家可以查阅相关资料;

有错的地方,欢迎大家指出。
--------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------
单个矩阵内部的运算:

a=[1 0 4
   4 6 0]
求和:
1.matlab:
sum(a)    %%%行之间相加         
ans=[5 6 4]
sum(a,2)   %%%列之间相加
ans=[5
     10]
sum(sum(a)) %%%求总和
ans=15
2.SAS iml:
a[+,]   %%%行之间相加
ans=[5 6 4]
a[,+]   %%%列之间相加
ans=[5
     10]
a[+]   %%%求总和
ans=15

平均值:
1.matlab:
与求和函数sum相似,改成mean即可
2.SAS iml:
与求和相似,改“+”为“:”即可

内部元素相乘:
1.matlab:
与求和函数sum相似,改成prod即可
2.SAS iml:
与求和函数相似,改“+”为“#”即可

平方和运算:
1.matlab:
通过sum函数,sum(a.*2);   %%%通过点乘运算先求得平方,在求和
2.SAS iml:
可以通过如上相同的思路
也可以和求和函数相似,改‘+’为'##'即可

最大值,最小值
1.matlab:
max(a)   %%%最大值运算,注:为行之间元素的比较
ans=[4 6 4]
max(max(a))   %%%全体元素的最大值
ans=6
若要求列之间元素的比较,可用max(a'),转置a,再求行之间最大值,不可用max(a,2),
max(a,2)是将a中每个元素与2比较,取较大的值
min求最小值
2.SAS iml:
最大值:
与求和函数相似,改‘+’为‘<>’即可
最小值:
与求和函数相似,改‘+’为‘><’即可

逻辑运算:
1.matlab:
any(a<modify>)   %%%每列中只要一个满足条件输出1,否则为0;
any(a>0)  
ans=[1 1 1]   注:matlab any函数对每列做运算,要求全体元素的判断可用any(any(a>0)),
如果不加修饰条件,默认修饰条件为a=0;
即any(a) 等价于 any(a==0);
ans=[0 1 1]
all(a<modify>)    %%%每列中全部符合输出条件才输出1,否则为0,用法和any相似
all(a>0)  
ans=[1 0 0]   
2.SAS iml:
any(a<modify>),all(a<modify>)
注:用法相似,但iml中对全体元素进行运算
any(a>0)   
ans=1
all(a>0)
ans=0

查找函数:
1.matlab:
find(a<modify>)   %%%查找符合修饰条件的在函数中的位置
find(a==6)
ans=4
a(find(a>2))     %%%输出a中大于2的元素
ans=[4 6]
2.SAS iml:
loc(a<modify>)
loc(a==6)  
ans=5      注:iml中位置与matlab略有不同,matlab是按列数,数完一列在数另一列,而iml是按行数
a(loc(a>2))


---------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------
多个矩阵之间的运算:

a=[1 0 4        b=[0 1 5
   4 6 0]          3 0 1]
+ - * 不再叙述。
除法:(矩阵运算中没有除法的)
1.matlab:
a/b  等价于 a*inv(b)   a乘以b的逆矩阵
此外matlab中有个左除\   a\b 等价于 b/a
2.SAS iml:
a/b  与matlab中完全不同  结果为a,b中对应元素相除,等价于点除,显然要求b中元素全部非0

点运算:(要求a,b矩阵大小相同,或b为常数)
1.matlab:
a.*b      %%%a,b对应元素相乘
ans=[0 0 20
     12 0 0]
a.\b      %%%a,b对应元素相除,注意b中元素要为非0

a.^b      %%%a中元素以b中对应元素的乘方
ans=[1 0 1024
     64  1  0 ]
若b为常数,则等价于a中每个元素都与b进行相应的运算
2.SAS iml:
与matlab类似:
  ‘#’   %%%点乘
  ‘/’  %%%点除
  ‘##’ %%%点乘方
大小比较:
1.matlab
max(a,b)   %%%取a,b中对应元素较大的值组成矩阵
ans=[1 1 5
     4 6 1]
min(a,b)   %%%取a,b中对应元素较小的值组成矩阵
ans=[0 0 4
    3 0  0]
若b(a)为常数,则等价于a(b)中每个元素都与b比较大小
2.SAS iml:
a<>b    %%%取a,b中对应元素较大的值组成矩阵
a><b    %%%取a,b中对应元素较小的值组成矩阵
若b(a)为常数,则等价于a(b)中每个元素都与b比较大小
逻辑运算:
1.matlab:
a&b    %%%或运算,a,b中对应元素都不为0,输出1,否则输出0
ans=[0 0 1
     1 0 0]
a|b   %%%与运算,a,b中对应元素只要有一个不为0,输出1,否则输出0
ans=[1 1 1
     1 1 1]
~a    %%%非运算,a中元素不为0,输出0,不满足,输出1
ans=[0 1 0
     0 0 1]
a>b     %%%a,b中对应元素满足条件,输出1,否则输出0
ans=[1 0 0
     4 1 0]
'a<b' 'a=b' 'a>=b' 'a<=b'  %%%同上
2.SAS iml:
与matlab相似,非运算改成^a即可

------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------

此外matlab还有cumsum,cumprod,累加累乘等特殊功能,SAS还有 >:<  , <:>找寻每行每列最大值位置等特殊功能;

这里列出的是matlab,SAS iml中最常用的运算。掌握并且灵活运用这些函数,能够大大简化程序,减少循环的使用,提高程序的效率;

上述给出的只是最基本的运用,很多时候,几个运算的组合,往往就能达到想要的效果,这就需要我们在使用的时候慢慢去琢磨,品味。







二维码

扫码加我 拉你入群

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

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

全部回复
2012-7-8 22:00:03
多谢楼主。
二维码

扫码加我 拉你入群

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

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

2012-7-8 22:12:46
so?   
二维码

扫码加我 拉你入群

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

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

2012-7-8 22:13:28
so?   
二维码

扫码加我 拉你入群

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

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

2012-7-8 22:18:27
IML的矩阵计算功能远逊于MATLAB。前者玩游戏可以,真的用来做科研就不值了。
二维码

扫码加我 拉你入群

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

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

2012-7-8 22:26:30
davil2000 发表于 2012-7-8 22:18
IML的矩阵计算功能远逊于MATLAB。前者玩游戏可以,真的用来做科研就不值了。
同意,单说矩阵运算,matlab确实是神一般的存在,不过iml和SAS数据集做交互还是有可取地方的,话说9.3iml可以调用所有proc步,还是值得期待滴。
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群