matlab - 给定值和 bin 边缘,在 MATLAB 中找到每个值的 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
解决方案
或许,看看 MATLABdiscretize
中介绍的函数R2015a
。使用此功能,您可以将循环替换为:
binValues = discretize(values, bin, 'IncludeEdge', 'right');
您可以使用参数将 bin 边缘上的值分配给左侧或右侧 bin IncludeEdge
。例如,does10
属于 bin 1
(ie: ..., "IncludeEdge", "left"
) 或 bin 2
(ie: ..., "IncludeEdge", "right"
)。
最后,请注意,bin 范围之外的值将被分配 bin 值NaN
。
推荐阅读
- oracle - 如何在 Windows 桌面的 Oracle 中创建目录
- php - 为什么 php == 不能在工匠 tinker laravel 上工作
- node.js - 使用 Puppeteer 和 Node JS 进行 Sharepoint 身份验证
- javascript - 根据搜索参数使用 JSONPath 在 json 中搜索
- javascript - 如何将表单中的多个复选框字段分配给ajax请求
- ruby-on-rails - Shrine::Error: storage :cache 未在 FileUploader 上注册
- sql-server - 如何在 SQL Server 中执行“选择布尔表达式”,如 Mysql 中的 select 1>0?
- php - 创建一个 PHP 提交处理程序?
- java - Hazelcast 未加载分布式地图条目
- android - 在双卡手机中调用 telephonyMananger.getSimSerialNumber() 时会检查哪个 SIM 卡插槽?