给定值和bin边,在MATLAB中找到每个值的bin

给定值和bin边,在MATLAB中找到每个值的bin,matlab,find,bin,Matlab,Find,Bin,我有一组值,我想找出每一个值都属于哪一个箱子,它们更紧凑,可能是矢量化的,最重要的是比下面的更快 values = rand(1,3)*50; bins = 0:10:50; binValues = nan(size(values)); for valueIndex = 1:length(values) dif = bins - values(valueIndex); [~,locat] = min(abs(dif)); %to see on which side it

我有一组值,我想找出每一个值都属于哪一个箱子,它们更紧凑,可能是矢量化的,最重要的是比下面的更快

values = rand(1,3)*50;
bins = 0:10:50;
binValues = nan(size(values));
for valueIndex = 1:length(values)
    dif = bins - values(valueIndex);
    [~,locat] = min(abs(dif));
    %to see on which side it is
    if dif(locat)>0
        locat = locat - 1;
    end
    %if its outside the bins:
    if locat==0 || locat==length(bins)
        locat=nan;
    end
    binValues(valueIndex) = locat;
end

values
bins 
binValues
比如说,

values =

   28.6037   37.7998   30.8294


bins =

     0    10    20    30    40    50


binValues =

     3     4     4

也许,可以看看
R2015a
中介绍的MATLAB函数。使用此功能,您可以将循环替换为:

binValues = discretize(values, bin, 'IncludeEdge', 'right');
您可以使用
IncludeEdge
参数将箱子边缘上的值指定给左侧或右侧箱子。例如,
10
是否属于bin
1
(即:
…“IncludeEdge”、“left”
)或bin
2
(即:
…“IncludeEdge”、“right”


最后,请注意,超出bin范围的值将被指定为
NaN

的bin值。也许,请看一下
R2015a
中介绍的MATLAB函数。使用此功能,您可以将循环替换为:

binValues = discretize(values, bin, 'IncludeEdge', 'right');
您可以使用
IncludeEdge
参数将箱子边缘上的值指定给左侧或右侧箱子。例如,
10
是否属于bin
1
(即:
…“IncludeEdge”、“left”
)或bin
2
(即:
…“IncludeEdge”、“right”

最后,请注意,超出bin范围的值将被指定为bin值
NaN