2

「形状」を維持しながら整数の配列のサイズを変更する関数を作成したいと考えています。

目的は、FFT の計算を高速化することです。

y各要素が古い配列で「カバー」される要素の平均を含むサイズの新しい配列を返します。たとえば、w3 つの要素を持つ配列があり、2 つの要素を持つ別の配列を作成するz場合、最初の要素は: z[0] = (1 * w[0] + 0.5 * w[1]) * 2 / 3、2 番目の要素は: になりますz[1] = (0.5 * w[1] + 1 * w[2]) * 2 / 3。配列の「解像度」を変更するようなものです。(もちろん、小さい数値では、丸めによって情報が失われるリスクがありますが、数桁が問題にならないかなり大きな数値には丸めが必要です。)

非常に単純な質問のように感じますが、私は無駄に時間を費やしすぎました。私はいくつかのコードを持っています。ほぼ動作しますが、間違った方向に進んでいると思います (行数が多すぎます)。基本的には、元の配列をループして、各要素を分割する方法を計算し、ローカル変数でどこに配置するかを追跡しています。

また、私の検索では、配列のサイズを動的に変更するなどのものがすべて見つかりましたが、これは私が望んでいるものではありません。

したがって、考えられるスケルトンは次のとおりです。

public int[] the_function (int[] w, int y) {
    int[] z = new int[y];

    // Some code looping through the array

    return z;
}
4

2 に答える 2

0

最小公倍数であるlcmを使用して、積分演算を使用できます。最小公倍数のグリッドにマッピング/スケーリングされたソース配列 (w) とターゲット配列の両方をイメージします。

public static int gcd(int a, int b) {
    while (a != b) {
        if (a > b) a -= b; else b -= a;
    }
    return a;
}

public static int lcm(int a, int b) {
    return a * (b / gcd(a, b);
}

One then can achieve a high precision in averaging.
For image scaling ideal and fast.
For your purpose `double` math will do, I think, and saves a bit on index juggling.
于 2013-05-13T16:21:30.600 に答える