前面对IML的一些基本概念做了简单介绍,不过我貌似忘记了非常重要的一点,就是矩阵语言的交互性,被同事特意提醒了一下反应过来,非常感谢我的这位同事。
关于下交互性这一概念,在很多编程语言里都会强调这一点,它被习惯性简称为“REPL”,即“Read- EVAL- Print- Loop”,读取-计算-输出-循环。简单点讲就是在即在屏幕上输入代码时,能够实时演示出代码执行效果。这样的好处在于在编程开发过程中,开发人员可以快速的向前或向后预览代码,而各个环节的代码实现效果也会进行实时的展示,以此即可测试自己所开发的程序在各个环节的反应。具体示范如下所示:首先以IML的标志性proc IML过程步语句开头:
proc iml;
matrix={1 2,
3 4};
运行这一行代码(选中按F3),就可以在output界面看到matrix的结果,如下所示:
max=matrix[<>]; /*对矩阵元素求最大值*/
print max; 同样运行这两行代码(选中按F3),就可以在output界面看到matrix1的结果,如下所示:
如果想结束此次过程步,输入”quit;”就可以结束此次会话。
通过上述的代码输入方式,我们可以快速的得到代码输入的结果,并且方便的及时修改代码,保证程序运行方向的正确性。这也是区别于data步里的一个非常重要的特点。
接下来为大家介绍IML中的自带的函数,这一部分函数我希望能够尽可能的都介绍一下,因为在矩阵计算中,函数的功能是相当强大的,一个合适的函数不但能够简化你的程序,还能够提升程序的效率。
1.abs(matrix)abs函数跟正常的函数一样,用于求矩阵元素的绝对值,如:
2.exp(matrix)表示对矩阵元素求指数,同data步用法。
3.int(matrix)表示对矩阵元素取整,同data步用法。
4.log(matrix)表示对矩阵元素求对数,同data步用法。
5.sqrt(matrix)表示对矩阵元素求平方根,同data步用法。
6.mod(matrix1,matrix2)表示对两矩阵对应元素求余数,对前后矩阵的要求同矩阵中的“+”,用法同data步,例如:
7.normal(matrix)/uniform(matrix)表示对矩阵进行随机数矩阵的模拟,一个是模拟正态分布,一个是模拟均匀分布。
8.all(matrix)、any(matrix)All函数用于判断一个矩阵里的所有元素是否非零,如果所有元素非零,则返回一个数值1,否则只要存在一个元素为0,则返回数值0;any函数则判断方式为至少存在一个元素为非零,则返回1,否则除非所有元素为0,则返回数值为0。例如:
9.loc(matrix)表示矩阵的位置函数,可用于求解矩阵元素不为0所在的位置,也可以用来求解满足一定条件的矩阵元素所在的位置,返回的是一个1×n的行向量,n表示矩阵元素不为0的个数,例如:
上述loc(a)表示矩阵元素不为0的位置,矩阵a中有3个,位置分别为1、3、4。
另外还可以求解满足条件的矩阵元素位置:
首先解释一下vecdiag这个函数,它表示矩阵的对角元素,返回的是一个1×n矩阵,因此在本次程序中vecdiag(x)={1 -2 3},loc(vecdiag(x)>0)则表示为{1 3},因此y=x[{1 3},]如上所示。
10.ncol(matrix)、nleng(matrix)、nrow(matrix)。这三个函数用来对矩阵进行行、列维度的统计和矩阵元素的长度统计,三个函数返回的均为一个标量。其中数值型矩阵矩阵元素默认为8,字符型则以矩阵中字符串长度最长的元素长度为准。如果要返回一个元素长度统计的矩阵,可以用length(matrix)。
11.type(matrix)表示矩阵的类别,返回的是一个C(字符型)、U(不含任何值)、N(数值型)。例如:
大家先了解一下这些函数,消化一下。由于公众号还没有开通留言功能,所以各位如果对上述函数的介绍有不理解的地方可以在公众号直接给我留言,我会在后台回复大家。
未完待续。。。。。
微信公众号:mingfeng07数据搬运工
个人微信:xiaopengpeng07
欢迎加我来一块地玩耍啦!