如何在matlab中有效地对数据进行分类
how to efficiently bin data in matlab
我想根据一些 'steps' 对一些数据进行分箱,这里 1:10
。所以 bin{1}
应该包含值 >=steps(1) & <steps(2)
等
我想知道我是否可以从社区获得一些 tips/feedback,提出一个问题:是否有一些我尚未找到的分箱数据的常见做法,代码是否可以改进效率和可读性方面?
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
函数将是 "standard" 执行此操作的方法:
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
小一个元素,因为 steps
定义了 bin 边缘。总计数 sum(hc)
等于 data
中落在最低和最高 bin 之间的元素数 - 在这种情况下少于 numel(data)
因为 data
的一些元素是比 steps
.
中的最低分箱值低
histcounts
到 return bin 边缘有很多选项,指定 bin 的数量而不是边缘,return 每个元素的 bin 编号,等等...
如果您真正想要的只是条形图(在您的评论中注明),您可以使用 histogram
,它会在后台调用 histcounts
进行计算,但会输出一个数字也是。
histogram( data, steps );
我想根据一些 'steps' 对一些数据进行分箱,这里 1:10
。所以 bin{1}
应该包含值 >=steps(1) & <steps(2)
等
我想知道我是否可以从社区获得一些 tips/feedback,提出一个问题:是否有一些我尚未找到的分箱数据的常见做法,代码是否可以改进效率和可读性方面?
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
函数将是 "standard" 执行此操作的方法:
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
小一个元素,因为 steps
定义了 bin 边缘。总计数 sum(hc)
等于 data
中落在最低和最高 bin 之间的元素数 - 在这种情况下少于 numel(data)
因为 data
的一些元素是比 steps
.
histcounts
到 return bin 边缘有很多选项,指定 bin 的数量而不是边缘,return 每个元素的 bin 编号,等等...
如果您真正想要的只是条形图(在您的评论中注明),您可以使用 histogram
,它会在后台调用 histcounts
进行计算,但会输出一个数字也是。
histogram( data, steps );