2015-09-06 102 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; 
}