将矩阵(float)的每一行转换为向量

时间:2012-11-13 04:47:00

标签: c# .net c#-4.0 emgucv

我有一个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);  
                    }  

1 个答案:

答案 0 :(得分:3)

您可以使用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;

    }