4

座標を正規化する関数を実装する必要があります。私は正規化を次のように定義しています(間違っている場合はより良い用語を提案してください):

自然な範囲から 0 と 1 の間の値へのデータ セットのエントリのマッピング。

これは一次元では簡単でした:

    static List<float> Normalize(float[] nums)
    {
        float max = Max(nums);
        float min = Min(nums);
        float delta = max - min;

        List<float> li = new List<float>();
        foreach (float i in nums)
        {
            li.Add((i - min) / delta);
        }
        return li;
    }

2D バージョンも必要で、アスペクト比を維持する必要があります。しかし、私は数学を理解するのに苦労しています。

投稿されたコードは C# ですが、答えは C# である必要はありません。

前もって感謝します。:)

4

3 に答える 3

6

各ベクトル (1D、2D、または ND) に length を持たせたいようです<= 1
それが唯一の要件である場合は、各ベクトルを最も長いベクトルの長さで割ります。

double max = maximum (|vector| for each vector in 'data');
foreach (Vector v : data) {
    li.add(v / max);
}

これにより、結果リスト内の最長のベクトルの長さが 1 になります。

ただし、平面上の一連の点で最小値または最大値を見つけることができないため、これは 1 次元の場合の現在のコードと同等ではありません。したがって、いいえdelta

于 2010-10-05T08:53:45.427 に答える
1

簡単なアイデア: どちらの次元が大きいかを調べ、この次元で正規化します。2 番目の次元は、比率を使用して計算できます。このようにして、比率が維持され、値が 0 と 1 の間になります。

于 2010-10-05T08:51:41.910 に答える