2016-04-14 59 views
1

我試圖從長度爲259,920的矢量轉換爲361×720(與matlab中的vect2mat相同的概念)。代碼是工作,但是當我嘗試它時在HTC手機上,需要一秒鐘的反應。所以,我可以改變或使用什麼來以更少的時間獲得好的結果。下面的代碼我使用。如何減少轉換矢量到墊的時間複雜度

public static Mat vect2mat(double[] array, int a) { 
Mat matrix = new Mat(a,(array.length+a-1)/a, CvType.CV_8UC1); 
int count = 0; 
for(int i=0; i<(array.length+a-1)/a; i++){ 
    for(int j=0; j<a; j++){ 
     matrix.put(j,i,array[count]); 
     count++; 
    } 
} 
return matrix; 

}

+0

你或許可以創建從陣列的矩陣,然後重塑:'墊TMP =新墊(1,array.length,CvType.CV_8UC1); tmp.put(0,0,數組);返回tmp.reshape(1,a);'。請讓我知道,因爲我無法測試Java代碼。如果它有效,我會寫作答案 – Miki

回答

0

THIS CODE BELOW未測試(尤其是,數組索引)!

但其想法是使用System.arraycopy快速複製一維數組的一部分到二維數組。然後,將數組分配給Mat,因爲Mat可以同時放置整個數組(使用1循環),而不是逐個放置。

嘗試此示例代碼:

public static Mat vect2mat(double[] array, int a) { 
    Mat matrix = new Mat(a,(array.length+a-1)/a, CvType.CV_8UC1); 
    int count = 0; 
    double[][] matArray = new double[a][(array.length+a-1)/a]; 
    for(int i=0; i<(array.length+a-1)/a; i++){ 
     System.arraycopy(array, a*i, matArray[][i], 0, a); 
     matrix.put(a*i,i,array[][i]);//put the whole array 
    } 
    return matrix; 
}