我需要一些帮助,我有一个矩阵来表示网格上的点,当给定一个元素时,我想找到它最近邻居的索引,记住我有周期性的边界条件,所以如果我有元素a(1,1(,它的最近邻居是
-
A(1,N(
-
A(2,1(
-
A(1,2(
-
A(N,1(
其中A是我的矩阵,N是维度,我需要一个代码来找到给定元素的N.N的索引。提前谢谢。
以下是我对您的问题的解释:给定某个周期矩阵A
:
>> A = magic(4)
A =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
以及一些元素x
(示例1
(,然后找到x
的4个邻居的(i,j(索引。在这种情况下,索引(3,4(、(4,3(、(4,1(、(1,4(对应于12、15、4、13。
由于我不知道你的用例,我不知道索引的格式对你来说最方便。但作为一个例子,我们可以编写一个函数neighbors
,它返回一个具有元素x
的4个索引的结构。
function out = neighbors(A, x)
[m, n] = size(A);
[i, j] = find(A == x);
mod2 = @(x) mod(x-1, [m, n])+1;
out.down = mod2([i+1, j ]);
out.up = mod2([i-1, j ]);
out.right = mod2([i , j+1]);
out.left = mod2([i , j-1]);
end
然后我们可以按如下方式运行函数。
A = magic(4);
out = neighbors(A, 1);
A(out.left(1), out.left(2)); % this returns 15
A(out.right(1), out.right(2)); % this returns 4
A(out.up(1), out.up(2)); % this returns 12
A(out.down(1), out.down(2)); % this returns 13