【问题标题】:Convert each row of matrix( float) in to a vector将矩阵(float)的每一行转换为向量
【发布时间】:2012-11-13 04:47:00
【问题描述】:

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

【问题讨论】:

  • 循环有什么问题? (你可以很容易地展示代码......)
  • 我想知道是否还有另一种技术[更简洁],例如Linq,lamda表达式等

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


【解决方案1】:

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

    }

【讨论】:

  • 这将创建一个包含 128 行和 n 列的数组。我正在寻找的是:n 个单独的向量,每个向量有 128 个元素 Ex) V1={J1,J2,..,J128} V2={M1,M2,..,M128}
  • 你试过了吗,你应该得到一个包含n个128个浮点数数组的数组。
  • @user629926:是的,它确实可以正常工作,没有任何错误。但在这里我得到 128 行和 n 列;作为我的 n=4 所以它是一个 128X4 的矩阵
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-01
  • 2017-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-29
相关资源
最近更新 更多