我有一个函数ranker ,它接受一个向量并按升序分配数值等级。例如,
ranker([5 1 3 600]) = [3 1 2 4]或
ranker([42 300 42 42 1 42] = [3.5 6 3.5 3.5 1 3.5]
我正在使用一个矩阵variable_data ,我想将ranker函数应用于variable data所有行的每一行。这是我目前的解决方案,但是我觉得有一种方法可以将其向量化并使其同样快:p
variable_ranks = nan(size(variable_data)); for i=1:1:numel(nmac_ids) variable_ranks(i,:) = ranker(abs(variable_data(i,:))); end
回答:
与Amro和Jonas合作
variable_ranks = tiedrank(variable_data')'; 等级工具已由Stat工具箱中的Matlab函数取代(对那些没有它的人来说很抱歉),
[R,TIEADJ] = tierank(X)计算向量X中值的等级。如果任何X值被绑定,tierank计算其平均等级。返回值TIEADJ是对非参数检验符号秩和秩和所需的关系以及Spearman秩相关性的计算的一种调整。
TIEDRANK将沿Matlab 7.9.0(R2009b)中的列进行计算,但是未记录。因此,通过转置输入矩阵,行将变成列并对其进行排名。然后使用第二个转置以与输入相同的方式组织数据。本质上有一个非常经典的技巧:p
更多&回答...