【发布时间】:2015-11-14 06:43:32
【问题描述】:
我有一个函数可以在向量 x[m,n] 上执行 HodgesLehmann 稳健均值。 n为数据的批次索引,m为样本数。
function HLe = HodgesLehmann(x)
% Obtain dimensions
[m,n] = size(x);
% Create xi and xj values with the i <= j restriction enforced
q = logical(triu(ones(m,m),0));
i = uint32((1:m)'*ones(1,m));
xi = x(i(q),:);
j = uint32(ones(m,1)*(1:m));
xj = x(j(q),:);
% Calculate pairwise means (Walsh averages)
W = (xi+xj)./2;
% Calculate ordinary median of Walsh averages
HLe = median(W);
我正在寻找一种方法来加速这个函数,它不能很好地适应大尺寸的 x。任何加速这一过程的方式也是受欢迎的。
非常感谢。
【问题讨论】:
-
次要建议:而不是做例如
uint32((1:m)'*ones(1,m)),可以create the array directly as uint32 type跳过浮点数的转换,例如ones(1,m,'uint32')。 -
我尝试了你的建议,但它要么不起作用,要么我不完全理解你的建议。问题是 matlab 抱怨整数类不完全支持矩阵乘法 (MTIMES)。
-
抱歉,忘记了整数类的 MTIMES 支持。您可以忽略该建议。
标签: matlab vectorization