鄰居我有一個簡單的矩陣:MATLAB得到矩陣
1 2 3 4
5 6 7 8
8 9 10 11
12 13 14 15
我通過每一個元素需要循環,並建立一個新的矩陣與周圍的元素(一個在右邊,底部右側和底部的3 )。因此,我將結束這樣一個數組:
1 2 6 5
2 3 7 6
3 4 8 7
我成功地做到這一點,但我需要跳轉到該行下面我似乎無法弄清楚如何做到這一點。對於下一行它應該是:
5 6 9 8
6 7 10 9
...
任何想法?
鄰居我有一個簡單的矩陣:MATLAB得到矩陣
1 2 3 4
5 6 7 8
8 9 10 11
12 13 14 15
我通過每一個元素需要循環,並建立一個新的矩陣與周圍的元素(一個在右邊,底部右側和底部的3 )。因此,我將結束這樣一個數組:
1 2 6 5
2 3 7 6
3 4 8 7
我成功地做到這一點,但我需要跳轉到該行下面我似乎無法弄清楚如何做到這一點。對於下一行它應該是:
5 6 9 8
6 7 10 9
...
任何想法?
[m n] = size(A);
[jj ii] = ndgrid(1:m-1, 1:n-1); %// rows and columns except last ones
kk = sub2ind([m n], ii(:),jj(:)); %// to linear index
B = [ A(kk) A(kk+m) A(kk+m+1) A(kk+1) ] %// pick desired values with linear index
在您的例子:
B =
1 2 6 5
2 3 7 6
3 4 8 7
5 6 9 8
6 7 10 9
7 8 11 10
8 9 13 12
9 10 14 13
10 11 15 14
正是我所需要的,謝謝! – DianaLog
我不知道你在編碼的語言,所以我就用一個通用的佈局:
int[][] getNeighbors(int[][] source){
int arrayX = int[0].Length;
int arrayY = int.Length;
int[][] output = new int[arrayX-1*arrayY-1][4];
for(int y = 0; y < arrayY; y++){
for(int x = 0; x < arrayX; x++){
output[y+x][x] = source[y][x];
output[y+x][x+1] = source[y][x+1];
output[y+x][x+2] = source[y+1][x+1];
output[y+x][x+3] = source[y+1][x];
}
}
return output;
}
請原諒我數組語法。我不想用任何特定的語言編碼。我也確定這包含錯誤。隨時糾正我的答案。 :)
編輯:不知道matlab是一種語言(認爲這是一個類的縮寫)。下次我會更仔細地檢查。
歡迎來到SO!語言是MATLAB,通過檢查問題上的標籤可以看到......如果OP在問題中列出它,仍然會很好... – darthbith
我最喜歡的bsxfun
被投入到這裏工作 - 利用問題樣本輸入
[M,N] = size(A); %// A is Input
ind = bsxfun(@plus,[1:M-1],[(0:N-2).*M]') %//'
out = A(bsxfun(@plus,ind(:),[0 M M+1 1])) %// Desired output
輸出 -
out =
1 2 6 5
2 3 7 6
3 4 8 7
5 6 9 8
6 7 10 9
7 8 11 10
8 9 13 12
9 10 14 13
10 11 15 14
你跳過最後一列和最後一行的原始矩陣,對不對? –
是的就是這樣,我不需要那 – DianaLog