Matlab 我们正在创建一个for循环,它应该遍历矩阵中的所有行和列

Matlab 我们正在创建一个for循环,它应该遍历矩阵中的所有行和列,matlab,for-loop,matrix,Matlab,For Loop,Matrix,我们想知道如何定义行和列,以便将所有行和列插入该函数 % V is our matrix % i = columns of the matrix V %j = rows of the matrix V function quantity = neighbours(V,i,j) quantity = sum(sum(V(i-1:i+1,j-1:j+1)))-V(i,j) end 我仍然不确定我是否完全理解这个问题,但我觉得如果不尝试,我们将无法取得任何进展。这是你的函数,但它考虑了边。如

我们想知道如何定义行和列,以便将所有行和列插入该函数

% V is our matrix
% i = columns of the matrix V
%j = rows of the matrix V
function quantity = neighbours(V,i,j)
    quantity = sum(sum(V(i-1:i+1,j-1:j+1)))-V(i,j)
end

我仍然不确定我是否完全理解这个问题,但我觉得如果不尝试,我们将无法取得任何进展。这是你的函数,但它考虑了边。如果您是MatLab新手,则必须将其保存在名为“neights.m”的额外文件中

function quantity = neighbours(V,i,j)
height=size(V,1);
width=size(V,2);
quantity = sum(sum(V(max(i-1,1):min(i+1,height),max(1,j-1):min(j+1,width))))-V(i,j);
end
如果行或列位于矩阵的边缘,那么(1,1)区域将缩小以保持在矩阵内。否则,您将得到一个错误(可能是“下标索引必须是实正整数或逻辑数”),您可以在矩阵中循环,这不是最有效的,但可以做到这一点。除了“neights.m”文件外,此代码可以在任何地方运行

codeV = ones(5,3);
amount_of_neighbors = zeros(size(zcodeV));
for i=1:size(zcodeV,1) %height
    for j=1:size(zcodeV,2) %width
        amount_of_neighbors(i,j) = neighbours(codeV,i,j);
    end
end

disp(amount_of_neighbors)

我想出了一个奇怪的主意,但它应该是非常有效的!对于这个问题,您只需确保矩阵
V
的行数与列数相同。该函数将输出一个与
V
尺寸相同的矩阵,每个位置包含所有直接邻域(不包括对角邻域)的总和

说明:对于大型系统来说,使用两个简单的矩阵运算可能会花费大量计算时间,而不是迭代地遍历矩阵

A看起来像这样:

  [0 1 0 . .]
  [1 0 1 0 .]
A=[0 1 0 1 .]
  [. 0 1 0 .]
  [. . . . .]

重要提示:只适用于二次矩阵

如果需要整个矩阵V的输出,可以定义所需邻域大小和模式的窗口,然后将矩阵V与其卷积:

例如,对于8个街区的总和,您可以:

function quantity = neighbours(V)
    w = [1 1 1; 1 0 1; 1 1 1]; % define a window for summing 8-neigborhood of a pixel 
    quantity  = conv2(V, w, 'same'); % result matrix
end
如果您需要说4-neigborhood,您可以将上面的w替换为:

w = [0 1 0; 1 0 1; 0 1 0];

到目前为止你试过什么?codeV=[1;1;1;1]表示i=1:length(V)表示j1:length(V)’函数数量=邻域(V,i,j)数量=和(和(和)(V(i-1:i+1,j-1:j+1))-V(i,j)end
enter code here
end end`我们不知道如何改变函数中的列和行。您能举个例子说明您拥有什么样的数据以及需要什么样的输出吗?我觉得您的代码只适用于
I=2
j=2
。你的问题是它应该也适用于1和3吗?我们的问题是我们有一个矩阵16x16,我们希望我们的函数输入i和j对应于i=矩阵行j=矩阵列。我们希望创建一个可以遍历函数中所有列和行的函数。函数的目的是计算矩阵中元素的邻域数量首先非常感谢您对我们的帮助。其次,通过使用padarray函数在矩阵周围添加一个零帧,我们解决了边缘的行和列问题。谢谢您的帮助!这真的很重要。只是想澄清一下,您创建的函数是否总结了一个元素?是的,它添加了上、下、左、右的元素。好的,但是矩阵a做什么?矩阵a提供了应该添加的元素的选择。做一个实验,复制函数并在一个小的示例矩阵上使用它,比如说在一个矩阵上。矩阵乘法隐式地告诉函数它应该包含哪些因素。它还尊重V边界处的“缺失值”。
w = [0 1 0; 1 0 1; 0 1 0];