在JAVA中将大型数组分解为小型数组

在JAVA中将大型数组分解为小型数组,java,arrays,matlab,Java,Arrays,Matlab,我有一个图像像素的双数组,其大小取决于图像大小。假设图像是1000x1334,我将有一个结转输出[1000][1334]双数组 我需要在以下条件下将数组分解为更小的双[9][9]数组。我为它创建了一个for循环,但中途卡住了 //smaller array z double[][] z = new double[9][9]; for(int length = 0; length < carryOutput.length; length+=8) {

我有一个图像像素的双数组,其大小取决于图像大小。假设图像是1000x1334,我将有一个结转输出[1000][1334]双数组

我需要在以下条件下将数组分解为更小的双[9][9]数组。我为它创建了一个for循环,但中途卡住了

//smaller array z    
double[][] z = new double[9][9];

     for(int length = 0; length < carryOutput.length; length+=8)
     {
         for(int width = 0; width < carryOutput[0].length; width+=8)
         {
             ... code to fill in z array here ....
         }
     }
这里的问题是有一种方法可以避免打断许多数组。你看,如果是一个1000x1000的图像,大约会有100多个更小的阵列

我有一个正在运行的MATLAB代码,它实际上完成了这项工作。我正试图把它翻译成JAVA

附件是MATLAB代码的一部分:

      e = size(carryOutput);
        for length=1:8:e(1)-8;
            for wide=1:8:e(2)-8;

                z=coef(length:length+8,wide:wide+8);
        ...

    row = 1;
    col = 2;   

            if (z(row,col) < z(row,col+1))
                    smaller = smaller+1;  
                if z(row,col+2) > z(row,col+1)
                smaller_plus = smaller_plus+1;
                else if z(row,col+2) < z(row,col+1)
                smaller_minus = smaller_minus +1;
                else if z(row,col+2) == z(row,col+1)
                smaller_static = smaller_static +1;
                end;end;end;

....
我想要一个类似于MATLAB的输出的原因是,我必须在代码后面比较每个较小数组的行和列。编写一个代码来比较100个不同的数组会很麻烦


任何人都可以强调我的代码应该如何解决这个问题。

你的应用程序是如何被卡住的?如果数组大小非常大,则很可能是在垃圾收集中。我不关心分割数组。相反,我建议将heap添加到java运行时:

java -Xms1g -Xmx1g ...

我认为您无法避免创建100多个更小的阵列,但是有一些优化可以使您的代码运行得更快。例如,可以使用System.arrayCopy方法而不是内部For循环来更快地移动数据

您还提到,这些较小阵列的目的是相互比较,因此,您可以做的一个巨大的优化是存储有关其内容的一些散列信息,例如,9x9字节的CRC32,并使用这些散列值来确定两个9x9数组是否不同,而无需遍历81字节。

…为其创建了一个for循环,但被卡住了…我希望有多个更小的数组是carryOutput的子数组…是否有一种方法可以避免分成许多数组…运行MATLAB代码…试图将其转换为JAVA很难说出您的确切要求。
java -Xms1g -Xmx1g ...