给定值和 bin 边缘,在 MATLAB 中找到每个值的 bin
Given values and bin edges, find the bin of each value in MATLAB
我有一组值,我想找出它们中的每一个属于哪个 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 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的discretize
函数。使用此功能,您可以将循环替换为:
binValues = discretize(values, bin, 'IncludeEdge', 'right');
您可以使用 IncludeEdge
参数将 bin 边缘上的值分配给左侧或右侧 bin。比如10
属于bin1
(即:..., "IncludeEdge", "left"
)还是bin2
(即:..., "IncludeEdge", "right"
).
最后,请注意,bin 范围之外的值将被分配 NaN
.
的 bin 值
我有一组值,我想找出它们中的每一个属于哪个 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 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的discretize
函数。使用此功能,您可以将循环替换为:
binValues = discretize(values, bin, 'IncludeEdge', 'right');
您可以使用 IncludeEdge
参数将 bin 边缘上的值分配给左侧或右侧 bin。比如10
属于bin1
(即:..., "IncludeEdge", "left"
)还是bin2
(即:..., "IncludeEdge", "right"
).
最后,请注意,bin 范围之外的值将被分配 NaN
.