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

标签 ios c arrays histogram accelerate-framework

所以我有一个包含 500,000 个元素的数组:

float* arrayToBucketize=(float*) malloc(sizeof(float)*500000);

和一个表示桶的数组:

int buckets[5]={0,25,50,75,100};

遍历第一个数组的最快方法是什么,查看每个浮点值,将其与“桶”数组进行比较,并将该浮点值替换为最接近的桶值。因此,如果浮点值是 11.25,它将被替换为 0。另一方面,90.10 将被替换为 100。

此外,我需要该范围之外的任何值(<0 和 >100)保持不变。

我知道我可以使用 for 循环和 if 条件来做到这一点;但是在优化的坏习惯中,我试图找到一种更有效(更快)的方法来做到这一点。我希望 Accelerate 框架中有一个 C 函数或一个 iOS 函数可以做到这一点。或者可能是一系列 Accelerate 框架矩阵函数。

谢谢

最佳答案

对于存储桶范围内的每个值,除以存储桶值的最小公倍数。将结果四舍五入到最接近的整数,然后再乘以最小公倍数。

使用示例数字:

11.25 / 25 = 0.45
0.45 -> 0
0 * 25 = 0

90.10 / 25 = 3.604
3.604 -> 4
4 * 25 = 100

加速框架具有向量化的除法、舍入和乘法函数,因此这些函数应该运行得相当快。

关于ios - 在 iOS 中将数组元素分组到桶中的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14717757/

相关文章:

ios - API MISUSE(APPLE) 'NSMutableArray' 方法 'addObject:' 的参数不能为 nil

c - 如何以编程方式实现特定 USB 设备的序列号和其他详细信息?

python - 如何在 swig 中使用 numpy.i?

c# - 找到两个数组之间差异的更好方法

ios - 将用户定义的变量分配给 info.plist bool

ios - 如何从终端配置代码签名身份

C - 打印函数返回的字符

c++ - 从另一个进程在用户模式下回调,没有额外的线程

java - 重复数组列表

ios [[自拍] 中心].x