2012-11-13 4 views
4

플로트 [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

128 열의 n 배열을 포함하는 배열을 가져와야합니다. – user629926

+0

죄송합니다. 지금 테스트 해 보았습니다. – user629926