gpt4 book ai didi

matlab - 我怎样才能加快在 Matlab 中调用分位数的速度?

转载 作者:太空宇宙 更新时间:2023-11-03 19:23:47 24 4
gpt4 key购买 nike

我的 MATLAB 例程有一个相当明显的瓶颈。我分析了该函数,结果是 2/3 的计算时间用于函数 levels:

enter image description here

levels 函数接受一个 float 矩阵,并将每一列拆分为 nLevels 个桶,返回一个与输入大小相同的矩阵,每个条目由它落入的桶的编号。

为此,我使用 quantile 函数获取存储桶限制,并使用循环将条目分配给存储桶。这是我的实现:

function [Y q] = levels(X,nLevels)
% "Assign each of the elements of X to an integer-valued level"

p = linspace(0, 1.0, nLevels+1);

q = quantile(X,p);
if isvector(q)
q=transpose(q);
end

Y = zeros(size(X));

for i = 1:nLevels
% "The variables g and l indicate the entries that are respectively greater than
% or less than the relevant bucket limits. The line Y(g & l) = i is assigning the
% value i to any element that falls in this bucket."
if i ~= nLevels % "The default; doesnt include upper bound"
g = bsxfun(@ge,X,q(i,:));
l = bsxfun(@lt,X,q(i+1,:));
else % "For the final level we include the upper bound"
g = bsxfun(@ge,X,q(i,:));
l = bsxfun(@le,X,q(i+1,:));
end
Y(g & l) = i;
end

我可以做些什么来加快速度吗?代码可以向量化吗?

最佳答案

如果我没理解错的话,你想知道每个桶里掉了多少东西。使用:

n = hist(Y,nbins)

虽然我不确定它是否有助于加速。这样更干净。

编辑:在评论之后:

可以使用histc的第二个输出参数

[n,bin] = histc(...) also returns an index matrix bin. If x is a vector, n(k) = >sum(bin==k). bin is zero for out of range values. If x is an M-by-N matrix, then

关于matlab - 我怎样才能加快在 Matlab 中调用分位数的速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8601735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com