Performance Matlab中逆EDF的快速计算方法
我正在运行以下代码以获取数据点处数据矩阵的逆EDF值:Performance Matlab中逆EDF的快速计算方法,performance,matlab,Performance,Matlab,我正在运行以下代码以获取数据点处数据矩阵的逆EDF值: function [mOUT] = InvEDF (data) % compute inverse of EDF at data values % function takes T*K matrix of data and returns T*K matrix of transformed % data, keepin the order of the original series T = rows(data); K = cols(d
function [mOUT] = InvEDF (data)
% compute inverse of EDF at data values
% function takes T*K matrix of data and returns T*K matrix of transformed
% data, keepin the order of the original series
T = rows(data);
K = cols(data);
mOUT=zeros(T,K);
for j = 1:K
for i = 1:T
temp = data(:,j)<=data(i,j);
mOUT(i,j) = 1/(T+1)*sum(temp);
end
end
数据矩阵的大小通常为1000*10甚至1000*30,我调用这个函数几千次。有没有更快的方法?任何答案都将不胜感激。谢谢 试试这个-
mOUT=zeros(T,K);
for j = 1:K
d1 = data(:,j);
mOUT(:,j) = sum(bsxfun(@ge,d1,d1'),2); %%//'
end
mOUT = mOUT./(T+1);
您可以对值进行排序,并使用排序矩阵中的索引作为小于或等于值的计数。我们单独处理每个列,因此我将在Mx1矩阵上进行说明
A = rand(M,1);
[B,I] = sort(A);
C(I) = 1:M;
Ci现在将包含小于或等于Ai的值计数。如果可以有重复的值,则需要将其考虑在内
这种方法的优点是我们可以在OM log M time中完成,而您最初的内部循环是OM^2