作业帮 > 综合 > 作业

matlab中如何得到一组数中各个数排在第几位?

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/10/04 18:12:44
matlab中如何得到一组数中各个数排在第几位?
比如一组数:8,2,10,6,3,5.
如何得到它们从大到小的排名为:2,6,1,3,5,4.
楼上太搞了吧?rank是用来求矩阵秩的,和排序没有半毛钱的关系. 参考代码>> A=[8 2 10 6 3 5];
>> [B,I]=sort(-A);
>> [C,I]=sort(I); I
I =
     2     6     1     3     5     4 说明1、第一处调用sort也可以写成:[B,I]=sort(A,'descend');因早期版本的MATLAB没有按降序排列的选项,为提高通用性,上面给的代码未使用'descend'选项. 2、如果不希望产生额外的无用变量B和C,可以把B和C用I代替,即写成:>> A=[8 2 10 6 3 5];
>> [I,I]=sort(-A);
>> [I,I]=sort(I); I
I =
     2     6     1     3     5     4在调用函数时,如果输出参数表中有重复的变量,则该变量会保留最后面那个位置的输出值.如果版本足够新(好像要2011a之后?不确定,懒得查了),也可以把要忽略的参数以波浪线(tilde,~)代替.
再问: 非常谢谢,但是我不懂 [I,I]=sort(I); 这个与我要的结果的逻辑呀,可以解释一下么?谢谢。
再答: 上面说过了,如果函数的输出参数表中有重复的变量,则该变量会保留最后面那个位置的输出值。对于sort函数来说,设[B,I]=sort(A);返回的第一个参数B是对A进行排序的结果,第二个参数I是一个索引向量,二者满足B=A(I)。而你现在想要的是一个能够满足A=B(I)的索引向量I(姑且不论升序或降序),所以要把第一次得到的I再进行一次排序。