簡體   English   中英

合並2D陣列

[英]Combine 2D Arrays

我需要弄清楚如何旋轉3x3陣列

{{7,2,3},
 {0,4,8},
 {5,6,1}}

進入9x9數組,其中每個3x3節都是原始數組o ,但是每個值nn+(9*c) ,其中c是對應節。 換句話說,由於原始數組的左上部分為originalValue+(9*7) ,因此第0,0部分(左上)的每個值都應更改為originalValue+(9*7) 。與右下角相似,但是公式將為originalValue+(9*1)因為原始數組的右下部分為1。新數組應類似於( 僅包括提到的兩個部分

{{70,65,66,0,0,0,0,0,0},
 {63,67,70,0,0,0,0,0,0},                   
 {68,69,64,0,0,0,0,0,0},               
 {00,00,00,0,0,0,0,0,0},//leading zeros added for easy legibility
 {00,00,00,0,0,0,0,0,0},         
 {00,00,00,0,0,0,0,0,0},         
 {0,0,0,0,0,0,16,11,12},            
 {0,0,0,0,0,0,09,13,17},             
 {0,0,0,0,0,0,14,15,10}}               

現在這里是最困難的部分:我需要重復該過程,但要使用此9x9數組作為原始數組來獲得27x27數組,然后再重復多次以得到每次更大的數組(81x81然后243x243,依此類推)。

我已經能夠獲得方法addAllValues()但是我無法繼續前進。

public static int[][] addAllValues(int[][] data, int value2){
    int value = value2 * 9;
    int[][] temp = data.clone();
    int[][] newData = temp.clone();
    for (int i = 0; i < temp.length; i++) {
        for (int j = 0; j < temp[0].length; j++) {
            newData[i][j] = temp[i][j] + value;
        }
    }
    return newData;
}

誰能幫我這個? 提前致謝!

這是我嘗試過的:

public static int[][] gen(int amount) {
    if (amount == 0) {
        return normal;
    } else {
        int[][] newArray = gen(amount-1);
        int[][] temp = new int[newArray.length*3][newArray.length*3];
        int[][][][] newArrays = {{addAllValues(newArray,7),addAllValues(newArray,2),addAllValues(newArray,3)},{addAllValues(newArray,0),addAllValues(newArray,4),addAllValues(newArray,8)},{addAllValues(newArray,5),addAllValues(newArray,6),addAllValues(newArray,1)}};
        for (int i = 0; i < temp.length; i++) {
            for (int j = 0; j < temp.length; j++) {
                int x=0,y=0;
                if (0 <= i && i < 3){
                    x = 0;
                } else if (3 <= i && i < 6){
                    x = 1;
                } else if (6 <= i && i < 9){
                    x = 2;
                }
                if (0 <= j && j < 3){
                    y = 0;
                } else if (3 <= j && j < 6){
                    y = 1;
                } else if (6 <= j && j < 9){
                    y = 2;
                }
                temp[i]
                        [j] = newArrays[x]
                        [y]
                        [i]
                        [j];
            }
        }
        return temp;
    }
}

好的,這很基本。

您有一個方矩陣A。

    [a b c]
A = [e f g]
    [h i j]

您將矩陣向右(水平)復制3次以獲取[AAA] ,然后將條帶(垂直)復制3次至底部以獲取正方形的矩陣

    [A A A]
B = [A A A]
    [A A A]

新矩陣的每個維度大3倍,或總大小(每個“區域”)大9倍。 現在您需要做的是修改每個子矩陣-從原始矩陣中添加相應的元素。 您需要找到子矩陣的索引(子節的索引),並在原始矩陣中使用相同的索引來獲取相應的標量。

[9*A(0,0)+A 9*A(0,1)+A 9*A(0,2)+A]
[9*A(1,0)+A 9*A(1,1)+A 9*A(1,2)+A]
[9*A(1,0)+A 9*A(1,1)+A 9*A(1,2)+A]

我們需要設置的最后一個鏈接是知道新矩陣B中的哪個元素對應於哪個部分。 B大3倍,例如B [0..8,0..8],因此,如果將B中元素的索引除以3(整數除法),我們將得到它的截面,這就是A中標量的索引。

我們說元素B(r,c)位於(i,j)=(r/3, c/3) ,因此該元素應使用A(i,j)進行修改。 最后一句話幾乎總結了一下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM