2015-09-06 101 views
4

我有一個矩陣double[][]與任意尺寸但大於300(可能在一個或可能在兩個維度)。我想將它縮放到double[300][300]調整Java中的矩陣的大小

我的主要做法是插值矩陣,使其達到double[600][600],然後採取四種元素,找到它們的平均值,即元素0,00,11,01,1將是最終的300x300的矩陣0,0

我在JAVA中找到了插值庫,但是我找不出如何使用它。任何人都可以提供一些例子或信息?

圖書館是:http://docs.oracle.com/cd/E17802_01/products/products/java-media/jai/forDevelopers/jai-apidocs/javax/media/jai/Interpolation.html

日Thnx。

+0

謝謝JB Nizet。你是對的,我很抱歉,但是我對所有的搜索感到有些茫然。我剛剛編輯了這個問題,我發佈了這個庫。 – Xxxo

+0

你有沒有任何代碼顯示你迄今爲止的嘗試? –

+0

@TimBiegeleisen No Tim。我想實現的這個過程只是一個更大的過程的一小部分。所以,我沒有任何代碼能夠顯示我迄今所做的工作。此外,我不問任何解決方案:)只是一個如何使用Java插值的例子。 – Xxxo

回答

0

如何編寫一個簡單的方法,將源單元格映射到目標,然後平均?

public static boolean matrixReduce(double[][] dst, double[][] src) { 
    double dstMaxX = dst.length - 1, dstMaxY = dst[0].length - 1; 
    double srcMaxX = src.length - 1, srcMaxY = src[0].length - 1; 
    int count[][] = new int[dst.length][dst[0].length]; 

    for (int x = 0; x < src.length; x++) { 
     for (int y = 0; y < src[0].length; y++) { 
      int xx = (int) Math.round((double) x * dstMaxX/srcMaxX); 
      int yy = (int) Math.round((double) y * dstMaxY/srcMaxY); 

      dst[xx][yy] += src[x][y]; 
      count[xx][yy]++; 
     } 
    } 

    for (int x = 0; x < dst.length; x++) { 
     for (int y = 0; y < dst[0].length; y++) { 
      dst[x][y] /= count[x][y]; 
     } 
    } 

    return true; 
}