Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在iOS中,将数组元素分组到存储桶的最快方法是什么?_Ios_C_Arrays_Histogram_Accelerate Framework - Fatal编程技术网

在iOS中,将数组元素分组到存储桶的最快方法是什么?

在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)

所以我有一个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)的值保持不变

我知道我可以用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会得到你想要的结果。杰夫,这很有效。你能把它写在一个答案里吗?这样我就可以核对答案了。