2016-04-14 17 views
1

için nasıl azaltılır Boyutu 259,920 ile uzun vektörden 361 X 720 mat (matlab vect2mat ile aynı kavram) dönüştürmek için çalıştı. Kod çalışır, ancak denediğimde HTC telefonda, yanıt vermek için bir saniye sürer. Yani, daha az zaman ile iyi bir sonuç elde etmek için ne değiştirebilirim veya kullanabilirim. Kullandığım aşağıdaki kod.Vektör dönüştürmek için zaman karmaşıklığı mat

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

Muhtemelen diziden matrisi oluşturabilir ve:

Bu örnek kod deneyin tmp.put (0,0, dizi); tmp.reshape (1, a); Java kodunu test edemediğim için lütfen bana bildirin. Çalışırsa cevap olarak yazacağım – Miki

cevap

0

AŞAĞIDA BU KOD TEST DEĞİLDİR (özellikle, dizi indeksleme) !!!

Ancak buradaki fikir, tek boyutlu dizinin parçalarını 2 boyutlu bir diziye hızlı bir şekilde kopyalamak için System.arraycopy kullanmaktır. Ardından diziyi Mat'a atayın, çünkü bir Mat tüm diziyi tek tek koymak yerine (1 döngü kullanarak) aynı anda yerleştirebilir. `Mat tmp = Yeni Mat (1, Array.length, CvType.CV_8UC1:;) yeniden şekillendirmek sonra

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; 
}