2015-02-05 171 views
0

4x4矩阵阵列大小将被拆分成若干个2x2矩阵阵列。我想知道矩阵中断是如何自动变成4x4矩阵的2x2阵列的?java中的阵列矩阵

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 

package tester; 

import java.util.Scanner; 

/** 
* 
* @author Jhamsir Crown 
*/ 
public class contoh { 
    public static void main(String[] args) { 

    double f[][] = new double[4][4]; //z merupakan hasil 

    f[0][0] = 1; 
    f[0][1] = 2; 
    f[0][2] = 3; 
    f[0][3] = 4; 
    f[1][0] = 5; 
    f[1][1] = 6; 
    f[1][2] = 7; 
    f[1][3] = 8; 
    f[2][0] = 9; 
    f[2][1] = 10; 
    f[2][2] = 11; 
    f[2][3] = 12; 
    f[3][0] = 13; 
    f[3][1] = 14; 
    f[3][2] = 15; 
    f[3][3] = 16; 

    for (int i = 0; i < f.length; i++) { 
     for (int j = 0; j < f[0].length; j++) { 
     System.out.print(f[i][j] + " "); 
     } 
     System.out.println(""); 
    } 

    System.out.println("\n dipecah ke dalam beberapa Blok yang berukuran 2 X 2"); 
    System.out.println("\n Blok 1"); 

    for (int i = 0; i < 2; i++) // for pada ini untuk menampilkan data baris 
    { 
     for (int j = 0; j < 2; j++) // kolom 
     { 
     System.out.print(" " + f[i][j]); // Menampilkan data A [i][j] 
     } 

     System.out.println(); // memubuat baris ke bawah 
    } 

    System.out.println("\n Blok 2"); 

    for (int i = 0; i < 2; i++) // for pada ini untuk menampilkan data baris 
    { 
     for (int j = 2; j < 4; j++) // kolom 
     { 
     System.out.print(" " + f[i][j]); // Menampilkan data A [i][j] 
     } 

     System.out.println(); // memubuat baris ke bawah 
    } 

    System.out.println("\n Blok 3"); 

    for (int i = 2; i < 4; i++) // for pada ini untuk menampilkan data baris 
    { 
     for (int j = 0; j < 2; j++) // kolom 
     { 
     System.out.print(" " + f[i][j]); // Menampilkan data A [i][j] 
     } 
     System.out.println(); // memubuat baris ke bawah 
    } 

    System.out.println("\n Blok 4"); 

    for (int i = 2; i < 4; i++) // for pada ini untuk menampilkan data baris 
    { 
     for (int j = 2; j < 4; j++) // kolom 
     { 
     System.out.print(" " + f[i][j]); // Menampilkan data A [i][j] 
     } 

     System.out.println(); // memubuat baris ke bawah 
    } 
    } 
} 

回答

0

当我们与矩阵,这并不意味着存储数据系统采用矩阵式格式工作。数据存储在连续的内存位置,您可以借助指针来检查这一点。所以从4x4制作2x2矩阵并不难,也不是什么火箭科学。

0

理想情况下,你会将你的矩阵封装在类中来封装数据。如果你这样做,那么你的“分裂”矩阵可能只是指向其他矩阵的指针。

喜欢的东西:

interface Matrix<V> { 
    Dimensions getSize(); 
    V getValue(int row, int col); 
} 

class SimpleMatrix<V> implements Matrix<V> { 
    ... 
} 

class SubMatrix<V> implements Matrix<V> { 
    public SubMatrix(Matrix<V> parent, int row, int col, Dimensions size) { 
     ... 
    } 

    public V getValue(int row, int col) { 
     return parent.getValue(startRow + row, startCol + col); 
    } 
} 

然后让所有可能的子矩阵的列表相当简单:

List<Matrix> allSubmatrices(Matrix matrix, Dimensions dimension) { 
    List<Matrix> list = new ArrayList<>(); 
    for (int r = 0; r < matrix.getSize().rowCount - dimension.rowCount; r++) { 
     for (int c = 0; c < matrix.getSize().colCount - dimension.colCount; c++) { 
      list.add(new SubMatrix(matrix, r, c, dimension)); 
     } 
    } 
    return list; 
} 
+0

我矩阵分成小块的DCT方法的工作原理是闯入8×8矩阵的N×N彻底,,,并在每个块的转变是... !!!但我不知道如何闯入8x8矩阵NxN ... !!! –