4.3 概率和统计 MATLAB不仅提供了强大的矩阵运算功能,在线性代数方面有广阔的应用,而且还能对大量的数据进行分析和统计,比如最常用的操作求平均值、最大值、标准差等,还有统计工具箱提供的二项分布、正态分布、泊松分布等,另外还有其他更为深入的统计功能。 4.3.1 基本分析函数 1.sum函数 sum函数用于求矩阵列方向元素或向量的和,调用格式如下。 (1)B=sum(A):若A为向量,则返回所有元素的和;如A为矩阵,则分别对其各列所有元素求和并返回结果。 (2)B=sum(A,dim):分别对矩阵A中第dim维的所有元素求和。 【例4-16】 sum函数应用示例。 >> A = pascal(6) A = 1 1 1 1 1 1 1 2 3 4 5 6 1 3 6 10 15 21 1 4 10 20 35 56 1 5 15 35 70 126 1 6 21 56 126 252 >> A=A(:,1:4) % 创建演示矩阵 A = 1 1 1 1 1 2 3 4 1 3 6 10 1 4 10 20 1 5 15 35 1 6 21 56 >> B=sum(A) % 求各列的和 B = 6 21 56 126 >> C=sum(A') % 求转置后矩阵各列的和 C = 4 10 20 35 56 84 >> D=sum(A,1) % 求第1维方向也就是列方向各元素的和 D = 6 21 56 126 >> E=sum(A,2) % 求第2维方向也就是行方向各元素的和 E = 4 10 20 35 56 84 2.cumsum函数 cumsum函数用于求矩阵或向量的累积和,调用格式如下。 (1)B=cumsum(A):若输入参数A为一个向量,则返回该向量所有元素的累积和;若A为矩阵,则返回该矩阵列方向各元素的累积和。 (2)B=cumsum(A,dim):A为矩阵,dim为指定维数,若dim=1,则表示在列方向上求累积和;若dim=2,则表示在行方向上求累积和,如果A是多维矩阵那么dim可以为其他维数。 【例4-17】 cumsum函数应用示例。 >> cumsum(1:5) ans = 1 3 6 10 15 >> A=magic(4) A = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 >> cumsum(A) % 列方向上求累积和 ans = 16 2 3 13 21 13 13 21 30 20 19 33 34 34 34 34 >> cumsum(A,1) % 列方向上求累积和 ans = 16 2 3 13 21 13 13 21 30 20 19 33 34 34 34 34 >> cumsum(A,2) % 行方向上求累积和 ans = 16 18 21 34 5 16 26 34 9 16 22 34 4 18 33 34 通过比较【例4-16】和【例4-17】可以看出cumsum函数和sum函数的区别:cumsum函数是累积和,结果中含有每一步计算的结果,而sum给出的则是最终求和的结果。 3.prod函数 prod函数用于求矩阵元素的积,其调用格式如下。 (1)B=prod(A):若A为向量,则返回所有元素的积;若A为矩阵,则返回各列所有元素的积。 (2)B=prod(A,dim):返回矩阵A中的第dim维方向的所有元素的积。 【例4-18】 prod函数应用示例。 >> prod(1:10) % 计算10的阶乘 ans = 3628800 >> M = magic(3) M = 8 1 6 3 5 7 4 9 2 >> prod(M) % 列方向求积 ans = 96 45 84 >> prod(M,2) % 行方向求积 ans = 48 105 72 4.cumprod函数 cumprod函数用来求矩阵或向量的累积乘积,其调用格式如下。 (1)B=cumprod(A):若输入参数A为一个向量,则返回该向量所有元素的累积乘积;若A为矩阵,则返回该矩阵列方向各元素的累积乘积。 (2)B=cumprod(A,dim):A为矩阵,dim为指定维数,若dim=1,则表示在列方向上求累积乘积;若dim=2就代表在行方向上求累积乘积。 【例4-19】 cumprod函数应用示例。 >> cumprod(1:10) ans = Columns 1 through 7 1 2 6 24 120 720 5040 Columns 8 through 10 40320 362880 3628800>> A = [1 2 3; 4 5 6] A = 1 2 3 4 5 6 >> cumprod(A,1) % 列方向上求累积乘积 ans = 1 2 3 4 10 18 >> cumprod(A,2) % 行方向上求累积乘积 ans = 1 2 6 4 20 120 通过比较【例4-18】和【例4-19】可以看出cumprod函数和prod函数的区别:cumprod函数是求累积乘积,结果中含有每一步计算的结果,而prod给出的则是最终乘积的结果。 5.sort函数 sort函数用于对矩阵元素按升序或者降序进行排序,其调用语法如下。 (1)B=sort(A):对A进行默认的升序排序。输入参量A可以是向量、矩阵或字符串,若为向量,则对向量中的所有元素进行排序;若为矩阵,则对列方向各元素进行排序;若为字符串,则按其对应的ASCII码的大小进行排序。 (2)B=sort(A,dim):对矩阵A中的第dim维进行升序排序。 (3)B = sort(...,mode):按照指定升序或降序进行排序。mode可以是'ascend'(默认,升序),或者是'descend'(降序)。 (4)[B,IX] = sort(A,...):对A进行排序,并返回排序后各元素的下标值。 【例4-20】 sort函数使用示例。 >> A = [ 3 7 5;0 4 2 ] A = 3 7 5 0 4 2 >> sort(A,1) % 列方向排序 ans = 0 4 2 3 7 5 >> sort(A,2) % 行方向排序 ans = 3 5 7 0 2 4 >> sort(A,2,'descend') % 行方向降序排序 ans = 7 5 3 4 2 0 >> [B,IX] = sort(A,2) % 排序并返回下标 B = 3 5 7 0 2 4 IX = 1 3 2 1 3 2 >> B=reshape(18:-1:1,3,3,2) % 创建高维矩阵 B(:,:,1) = 18 15 12 17 14 11 16 13 10 B(:,:,2) = 9 6 3 8 5 2 7 4 1 >> sort(B,1) % 列方向排序 ans(:,:,1) = 16 13 10 17 14 11 18 15 12 ans(:,:,2) = 7 4 1 8 5 2 9 6 3 >> sort(B,2) % 行方向排序 ans(:,:,1) = 12 15 18 11 14 17 10 13 16 ans(:,:,2) = 3 6 9 2 5 8 1 4 7 >> sort(B,3) % 页方向排序 ans(:,:,1) = 9 6 3 8 5 2 7 4 1 ans(:,:,2) = 18 15 12 17 14 11 16 13 10 6.sortrows函数 sortrows函数用于在保持各行相对元素不变的情况下,对各行整体进行升序排列。sortrows函数调用语法如下。 (1)B = sortrows(A):按行对A进行升序排列。输入变量A必须是矩阵或者列向量。 (2)B = sortrows(A,column):基于向量column指定的列对矩阵A进行排序。 (3)[B,index] = sortrows(A,...):在对矩阵A进行排序的同时,返回下标索引。如果A是一个列向量,则B = A(index);如果A是一个m×n的矩阵,则B = A(index,:)。 【例4-21】 sortrows函数使用示例。 >> rand('state',0) % 设定随机数种子,以便于读者验证 >> A = floor(rand(6,7) * 100); % 创建测试矩阵,floor函数用于取整,以便于观察 >> A(1:4,1)=95; A(5:6,1)=76; >> A(2:4,2)=7; A(3,3)=73 % 修改部分数据,以体现函数用法 A = 95 45 92 41 13 1 84 95 7 73 89 20 74 52 95 7 73 5 19 44 20 95 7 40 35 60 93 67 76 61 93 81 27 46 83 76 79 91 0 19 41 1 >> B = sortrows(A) % 按照第1列元素大小对矩阵A进行排序 B = 76 61 93 81 27 46 83 76 79 91 0 19 41 1 95 7 40 35 60 93 67 95 7 73 5 19 44 20 95 7 73 89 20 74 52 95 45 92 41 13 1 84 通过比较可以看到,矩阵A中第1列具有相等的元素。sortrows函数在进行排序操作时,如果指定列中存在相等元素,则通过比较指定列右侧列中的元素来进行排序,右侧列中若还有相等元素,则按照右侧再下一列的元素进行排序。 >> C = sortrows(A,2) % 按照第2列的大小进行排序 C = 95 7 73 89 20 74 52 95 7 73 5 19 44 20 95 7 40 35 60 93 67 95 45 92 41 13 1 84 76 61 93 81 27 46 83 76 79 91 0 19 41 1 >> D = sortrows(A,[1 7]) % 按照第1列和第7列进行排序 D = 76 79 91 0 19 41 1 76 61 93 81 27 46 83 95 7 73 5 19 44 20 95 7 73 89 20 74 52 95 7 40 35 60 93 67 95 45 92 41 13 1 84 >> E = sortrows(A,[1 -7]) % 按照第1列和第7列进行排序 E = 76 61 93 81 27 46 83 76 79 91 0 19 41 1 95 45 92 41 13 1 84 95 7 40 35 60 93 67 95 7 73 89 20 74 52 95 7 73 5 19 44 20 矩阵D和E都是按照第1列和第7列进行排序,即首先按照第1列进行排序,如果第1列中存在相等元素,则按照第7列进行排序。参数[1 -7]中的负号的含义是按照降序排序。 >> F = sortrows(A, -4) % 按照第4列进行降序排序 F = 95 7 73 89 20 74 52 76 61 93 81 27 46 83 95 45 92 41 13 1 84 95 7 40 35 60 93 67 95 7 73 5 19 44 20 76 79 91 0 19 41 1
|
|