在iOS中,将数组元素分组到存储桶的最快方法是什么?
所以我有一个500000个元素的数组:在iOS中,将数组元素分组到存储桶的最快方法是什么?,ios,c,arrays,histogram,accelerate-framework,Ios,C,Arrays,Histogram,Accelerate Framework,所以我有一个500000个元素的数组: float* arrayToBucketize=(float*) malloc(sizeof(float)*500000); 以及表示存储桶的数组: int buckets[5]={0,25,50,75,100}; 通过第一个数组的最快方法是什么,查看每个浮点值,将其与“bucket”数组进行比较,并用最近的bucket值替换该浮点值。因此,如果浮点值为11.25,则将替换为0。另一方面,90.10将被100所取代 此外,我需要任何超出该范围(100)
float* arrayToBucketize=(float*) malloc(sizeof(float)*500000);
以及表示存储桶的数组:
int buckets[5]={0,25,50,75,100};
通过第一个数组的最快方法是什么,查看每个浮点值,将其与“bucket”数组进行比较,并用最近的bucket值替换该浮点值。因此,如果浮点值为11.25,则将替换为0。另一方面,90.10将被100所取代
此外,我需要任何超出该范围(100)的值保持不变
我知道我可以用for循环和if条件来实现这一点;但是在优化的坏习惯中,我试图找到一种更有效(更快)的方法。我希望加速框架中有一个C函数或一个iOS函数可以做到这一点。或者可能是一系列加速框架矩阵函数
感谢对于桶范围内的每个值,除以桶值的最低公倍数。将结果四舍五入到最接近的整数,然后再次乘以最小的公倍数 使用示例编号:
11.25 / 25 = 0.45
0.45 -> 0
0 * 25 = 0
90.10 / 25 = 3.604
3.604 -> 4
4 * 25 = 100
加速框架具有矢量化的除法、取整法和乘法函数,因此这些函数应该运行得相当快。对于桶范围内的每个值,除以桶值的最低公倍数。将结果四舍五入到最接近的整数,然后再次乘以最小的公倍数 使用示例编号:
11.25 / 25 = 0.45
0.45 -> 0
0 * 25 = 0
90.10 / 25 = 3.604
3.604 -> 4
4 * 25 = 100
accelerate框架已经矢量化了除法、取整和乘法函数,因此这些函数应该运行得相当快。您的存储桶是否总是像示例中那样均匀分布?是的。可能是不同的数字,但你可以假设它们是彼此的倍数(0,50100150200)等等。。。谢谢,我找不到任何矢量化的比较方法。但对于桶范围内的值,可以除以最低公倍数,四舍五入,然后乘以相同的数字。accelerate框架对乘、除和取整方法进行了矢量化。举例来说,11.25/25=0.45,四舍五入为0,90.10/25=3.604,四舍五入为4。再乘以25会得到你想要的结果。杰夫,这很有效。你们能不能把它写在一个答案里,这样我就可以作为答案来检查。你们的桶是否总是像你们的例子一样均匀分布?是的。可能是不同的数字,但你可以假设它们是彼此的倍数(0,50100150200)等等。。。谢谢,我找不到任何矢量化的比较方法。但对于桶范围内的值,可以除以最低公倍数,四舍五入,然后乘以相同的数字。accelerate框架对乘、除和取整方法进行了矢量化。举例来说,11.25/25=0.45,四舍五入为0,90.10/25=3.604,四舍五入为4。再乘以25会得到你想要的结果。杰夫,这很有效。你能把它写在一个答案里吗?这样我就可以核对答案了。