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

您可以使用 Buffer.BlockCopy 或 ArrayCopy 而不是手动分配每个值 for

        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 回答