1

したがって、500,000 要素の配列があります。

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

およびバケットを表す配列:

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

最初の配列を通過し、各 float 値を見て、それを「バケット」配列と比較し、その float 値を最も近いバケット値に置き換える最速の方法は何ですか。したがって、float 値が 11.25 の場合は 0 に置き換えられます。一方、90.10 は 100 に置き換えられます。

また、その範囲外 (<0 および >100) の値を変更しないようにする必要があります。

for ループと if 条件でこれを実行できることはわかっています。しかし、最適化の悪い習慣で、これを行うためのより効率的な (より高速な) 方法を見つけようとしています。Accelerate フレームワークにこれを実行できる C 関数または iOS 関数があることを願っています。あるいは、一連の Accelerate フレームワーク マトリックス関数かもしれません。

ありがとう

4

1 に答える 1

1

バケット範囲内の各値を、バケット値の最小公倍数で割ります。結果を最も近い整数に丸めてから、最小公倍数を再度掛けます。

例の数値を使用する:

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

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

加速フレームワークにはベクトル化された除算、丸め、および乗算関数が含まれているため、これらはかなり高速に実行されるはずです。

于 2013-02-07T22:34:43.897 に答える