2012-11-13 92 views
4

我有一个float [n,128]数组。现在我想每一行转换成一个单独的载体如下:将矩阵(float)的每一行转换为向量

//这里的代码是伪代码

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); 
        } 
+2

循环出了什么问题? (你可以很容易地显示代码...) –

+0

我想知道是否有另一种技术[更简洁],如Linq,lamda表达式等 –

回答

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; 

    } 
+0

这将使一个128行和n列的数组。 我正在寻找的是: 每个载体具有128个元素 N个独立向量 例)V1 = {J1,J2,......,J128} V2 = {M1,M2,...,M128} –

+0

你有没有尝试过,你应该得到一个包含n个128个浮点数组的数组。 – user629926

+0

对不起,我现在测试它,它应该工作。 – user629926