MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   将功能应用于所有行 (https://www.labfans.com/bbs/showthread.php?t=23794)

poster 2019-12-10 20:48

将功能应用于所有行
 
我有一个函数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

[B]回答:[/B]

与Amro和Jonas合作

variable_ranks = tiedrank(variable_data')'; 等级工具已由Stat工具箱中的Matlab函数取代(对那些没有它的人来说很抱歉),
[INDENT] [R,TIEADJ] = tierank(X)计算向量X中值的等级。如果任何X值被绑定,tierank计算其平均等级。返回值TIEADJ是对非参数检验符号秩和秩和所需的关系以及Spearman秩相关性的计算的一种调整。

[/INDENT]TIEDRANK将沿Matlab 7.9.0(R2009b)中的列进行计算,但是未记录。因此,通过转置输入矩阵,行将变成列并对其进行排名。然后使用第二个转置以与输入相同的方式组织数据。本质上有一个非常经典的技巧:p



[url=https://stackoverflow.com/questions/3506056]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 01:06

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.