如何在Matlab中有效地对数据进行装箱

问题描述 投票:0回答:1

我想根据某些“步骤”对某些数据进行分箱,此处为1:10。因此bin{1}应该包含值>=steps(1) & <steps(2)等。

我想知道是否可以从社区中获得一些提示/反馈,这是一个问题:是否有一些通用的做法来对我尚未发现的数据进行分箱,是否可以提高代码的效率和可读性? ?

data=abs(sin(0:.1:10)*10); %example data
steps=1:10; %user-defined bins
betw=@(x,mi,ma) x(x>=mi & x<ma); %function that returns values between minimum/maximum

bin={};
for ind=1:numel(steps)-1
  bin{ind}=betw(data,steps(ind),steps(ind+1));
end
bin

bin =

  1×9 cell array

  Columns 1 through 7

    {1×7 double}    {1×7 double}    {1×7 double}    {1×8 double}    {1×9 double}    {1×7 double}    {1×10 double}

  Columns 8 through 9

    {1×11 double}    {1×27 double}
matlab histogram binning
1个回答
1
投票

histcounts函数将是执行此操作的“标准”方法:

histcounts

请注意,data = abs(sin(0:.1:10)*10); %example data steps = 1:10; %user-defined bins hc = histcounts( data, steps ); >> hc = [ 7 7 7 8 9 7 10 11 27 ] hc小一个元素,因为steps定义了bin边缘。总计数steps等于sum(hc)中位于最低和最高分档之间的元素数-在这种情况下少于data,因为numel(data)的某些元素的值低于您的最低分档中的值data

steps中有很多选项可以返回箱的边缘,指定箱的数量而不是边缘,返回每个元素的箱的数量,等等...

如果您真正想要的只是条形图(在注释中注明),则可以使用histcounts,它在幕后调用histogram进行计算,但也会输出图形。

histcounts

histogram( data, steps );

© www.soinside.com 2019 - 2024. All rights reserved.