Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
 
 
主题工具 显示模式
旧 2019-12-10, 20:48   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 将功能应用于所有行

我有一个函数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



更多&回答...
poster 当前离线   回复时引用此帖
 


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 07:34


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