[英]Combine 2D Arrays
我需要弄清楚如何旋轉3x3陣列
{{7,2,3},
{0,4,8},
{5,6,1}}
進入9x9數組,其中每個3x3節都是原始數組o
,但是每個值n
是n+(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.