在MATLAB中查找中值需要花费大量时间

vjrehmav  于 2023-05-29  发布在  Matlab
关注(0)|答案(2)|浏览(188)

我有一个行向量X,我想找到它的中位数。我使用MATLAB的函数median()来找到相同的结果,但它被证明是我代码中的瓶颈。
在其他语言中是否有更快的实现方法来查找中位数?

q0qdq0h2

q0qdq0h21#

我能够将计算速度提高几个数量级,但不是通过不同的实现。
相反,我只是将向量转换为gpuArray,然后输入median()函数。对于大的矢量,这减少了几个数量级的计算时间。但是对于较短的数组来说速度变慢了,我相信这是因为时间被用在了将矢量转移到gpu内存中。
我发现矢量的过渡长度约为450。也就是说,对于短于450的向量,直接将向量馈送到median()函数中更好,对于较长的向量,转换为gpuArray,然后馈送到median()函数中更快。

lf5gs5x2

lf5gs5x22#

EDIT:在注解之后,我更正了添加排序的功能。它实际上比内置的要慢。

x=7*rand(1,dim);
tic 
median(x)
toc
tic
s=size(x,2);
x=sort(x);
if mod(s,2)~=0
x((s+1)/2)
else
    (x((s/2)+1)+x(s/2))/2
end
toc

相关问题