Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance Matlab中逆EDF的快速计算方法_Performance_Matlab - Fatal编程技术网

Performance Matlab中逆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

我正在运行以下代码以获取数据点处数据矩阵的逆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(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