我想根据某些“步骤”对某些数据进行分箱,此处为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}
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 );