为什么histcounts变化的速度呢?

3视图(30天)
1月
1月 2021年8月22日
评论道: 1月 2021年8月22日
我有一个向量和整数或浮点值出现,想数一数。
histcounts () 使用了以激光照射元素输入边缘作为上限的最后一本,所以我必须添加一个数字大于最大元素计算正确。这减缓了处理> 2倍,当都是整数的值:
%整数值:
x =圆((1:1e6) / 1);%等效为“/ 10”也
x = x (randperm(元素个数(x)));
用户体验=独特的(x);
ux2 =(用户体验,正);
ux3 = (ux, 1 e8);%任何数量巨大
ux4 =(用户体验,用户体验(结束)+ 1);
时间(@ ()histcounts (x, ux))% 0.045
时间(@ ()histcounts (x, ux2))% 0.171%慢得多! ! !
时间(@ ()histcounts (x, ux3))% 0.199%低于正吗?
时间(@ ()histcounts (x, ux4))% 0.0787%又快
% BinMethod =整数是快,但是箱子的数量是有限的:
时间(@ ()histcounts (x,“BinMethod”,“整数”))% 0.0059快!
元素个数(histcounts (x,“BinMethod”,“整数”))%,但只有10001而不是1 e6
%根据文档,这应该是65536 ? ! ?
%浮点值:
y =兰德(1,1 e6);
uy =独特(y);
uy2 = (uy,正);
uy3 = (uy uy(结束)+ 1);
时间(@ ()histcounts (y, uy))% 0.11148
时间(@ ()histcounts (y, uy2))% 0.2066
时间(@ ()histcounts (y, uy3))% 0.2100
%当地R2018b:类似的行为为整数,浮点值处理速度:
% 0.073%整数,用户体验
% 0.199%的用户体验,正
% 0.189% (ux, 1 e8)
% 0.061%(用户体验,用户体验(+ 1)结束)
% 0.162%浮点,uy
% 0.167% (uy,正)
% 0.315% [uy uy(结束)+ 1]%半速! ! !
我希望几乎相同的速度,因为它是几乎相同的工作量。
顺便说一下,一个简单的计数函数也快:
时间(@ ()simpleCount (x))% 0.0602
时间(@ ()simpleCount (y))% 0.0628
函数N = simpleCount (x)
S = (x);
q =[没错,diff (S) ~ = 0);
N = diff([找到(q),元素个数(x) + 1]);
结束
histcounts () 与计算最后一个元素前面的本不是很有用,但将最后一个边缘大大减缓了处理。我已经派遣一个增强请求TWM。
5个评论
1月
1月 2021年8月22日
@Adam Danz :谢谢你这个有用的信息。

登录置评。

答案(1)

布鲁诺陈德良
布鲁诺陈德良 2021年8月22日
这只是一个假设但histcounts可能使用二进制搜索有限的边缘值。去年边缘可能惩罚速度大。不确定如何处理正bonary搜索(可能是一个额外的比较检查?)
2的评论
布鲁诺陈德良
布鲁诺陈德良 2021年8月22日
“BinMethod“整数”是有用的情况下,可以保证,2 ^ 16箱就足够了”
把你的手在和使用 accumarray 代替。

登录置评。

下载188bet金宝搏


释放

R2021a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!