Storing the positions of neighbouring elements that have specific values.

2 次查看(过去 30 天)
A = zeros(5,5);
A(3,4)=1;
A(4,1)=1
I have a matrix of zeros with two 1's in postions (3,4) and (4,1). Starting with the 1 at (3,4) I want to store all the positions of neighbouring elements that are eqaul to 0. I want to do this as my next step is to choose one of the neighbours that equal 0, change that to a 1, and then start the whole process again, starting at any element that equals 1.

采纳的回答

dpb
dpb 2019-11-27
>> i0=3; j0=4;
>> [i,j]=find(~A(i0-1:i0+1,j0-1:j0+1));
>> [i,j]
ans =
1.00 1.00
2.00 1.00
3.00 1.00
1.00 2.00
3.00 2.00
1.00 3.00
2.00 3.00
3.00 3.00
>>
You'll have to restrict search to either include only interior initial points or modify to account for location on boundary in computing range vectors.
  3 个评论
dpb
dpb 2019-11-27
编辑:dpb 2019-11-27
Just add the initial position offset less one for one-based counting (twice)...
>> [i+i0,j+j0]-2
ans =
2.00 3.00
3.00 3.00
4.00 3.00
2.00 4.00
4.00 4.00
2.00 5.00
3.00 5.00
4.00 5.00
>>
Phillip Smith
Phillip Smith 2019-11-27
I did this and has worked perfectly
[r,c]=find(~D(i:i+2,j:j+2));
E=[r,c];
n=length(E);
for k=1:n
for x=1:2
if E(k,x)==1
E(k,x)=-1;
elseif E(k,x)==2
E(k,x)=0;
elseif E(k,x)==3
E(k,x)=+1;
end
end
end
Y= E+[i j];
where D is just the matrix that i am using and i,j is the initial point!!

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Resizing and Reshaping Matrices 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by