4

float[n,128] 配列があります。次のように、各行を個別のベクトルに変換します。

// ここのコードは疑似コードです

int n=48;  
    float[,] arrFloat=new float[n,128];  
    VectorOfFloat v1 = new VectorOfFloat(128);  // Vn equals to number of n

     v1= arrFloat[0];
     v2=arrFloat[1]
      .
      .
      .
      .
      Vn

最適化の方法は何ですか?


次のようにコードを書くこともできますが、もっと良い方法があるはずです。

 List<VectorOfFloat> descriptorVec = new List<VectorOfFloat>();
VectorOfFloat v1 = new VectorOfFloat();  
                    var temp = new float[128];  
                    for (int i = 0; i < descriptors1.GetLength(0); i++)  
                    {  
                        for (int j = 0; j < descriptors1.GetLength(1); j++)  
                        {  
                            temp[j] = descriptors1[0, j];  
                        }  
                        v1.Push(temp);  
                        descriptorVec.Add(v1);  
                    }  
4

1 に答える 1

3

for に各値を手動で割り当てる代わりに、Buffer.BlockCopy または ArrayCopy を使用できます。

        static float[][] ToVectors(float[,] matrix)
    {

        var array = new float[matrix.GetLength(0)][];

        for (int i = 0; i < array.Length; i++)
        {
            array[i]=new float[matrix.GetLength(1)];
            Buffer.BlockCopy(matrix, i * matrix.GetLength(1), array[i], 0, matrix.GetLength(1) * sizeof(float));
        }


        return array;

    }
于 2012-11-13T05:18:54.513 に答える