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中最常用的运算。掌握并且灵活运用这些函数,能够大大简化程序,减少循环的使用,提高程序的效率;
上述给出的只是最基本的运用,很多时候,几个运算的组合,往往就能达到想要的效果,这就需要我们在使用的时候慢慢去琢磨,品味。