Python 比较矩阵中的环绕值

Python 比较矩阵中的环绕值,python,matlab,matrix,Python,Matlab,Matrix,我对矩阵中的辐射映射有问题。MxN矩阵用于记录每个x-y位置的读数(计数)。如果任何值高于阈值,那么我需要将该值与其周围的值进行平均,以确定它是否为真或假阳性 我的问题是,当我检查矩阵边缘的值时,我不知道如何处理这个问题。我假设从A的平均值开始((I-1,j-1),(I-1,j),(I-1,j+1),(I,j-1),…,(I+1,j+1))。但是,当左边缘的(i,j)处有一个值时,就没有j-1列 例如,假设阈值为7 [ 1 4 2; 3 5 6; 2 6 10 ] 要考虑的值

我对矩阵中的辐射映射有问题。MxN矩阵用于记录每个x-y位置的读数(计数)。如果任何值高于阈值,那么我需要将该值与其周围的值进行平均,以确定它是否为真或假阳性

我的问题是,当我检查矩阵边缘的值时,我不知道如何处理这个问题。我假设从A的平均值开始((I-1,j-1),(I-1,j),(I-1,j+1),(I,j-1),…,(I+1,j+1))。但是,当左边缘的
(i,j)
处有一个值时,就没有
j-1

例如,假设阈值为
7

[ 1  4  2;
  3  5  6;
  2  6 10 ]

要考虑的值将是<代码> 5 ,<代码> 6 ,<代码> 6 ,和<代码> 10 < /代码>。我的初始方法将暗示矩阵之外的零(我相信),从而扭曲平均值

如何在MATLAB或Python中解决此问题?

MATLAB答案

threshold = 7;
A = [1 4 2; 3 5 6; 2 6 10];
B = padarray(A,[1,1]);
C = B; %Storing B so that values don't interfere with one another
[x,y] = find(B>=threshold);
for ii1 = 1:length(x)
    for jj1 = 1:length(y)
        ii = x(ii1);
        jj = y(jj1);
        C(ii,jj) = sum(sum(B(ii-1:ii+1,jj-1:jj+1)))./nnz(B(ii-1:ii+1,jj-1:jj+1));
    end
end
A = C(2:end-1,2:end-1);

虽然不是最干净的代码,但它应该可以完成任务。

有几种方法可以编写此代码-特别是在两种语言中,您是否尝试过这两种方法,例如,这样我们就可以在一种方法的基础上构建,而不仅仅是为您编写代码?您需要决定要为您的问题设置什么边界条件(它们被称为那样)。我想说的是,在你的例子中,你想要使用镜像边界条件,或者把Neumman边界条件设置为零。基本上向外重复拐角值。这样你就不会让每个角点都成为异常值。谢谢你的帮助,padarray和nnz技巧正是我所需要的。