Storing the positions of neighbouring elements that have specific values.

2 visualizzazioni (ultimi 30 giorni)
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.

Risposta accettata

dpb
dpb il 27 Nov 2019
>> 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 Commenti
dpb
dpb il 27 Nov 2019
Modificato: dpb il 27 Nov 2019
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 il 27 Nov 2019
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!!

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Resizing and Reshaping Matrices in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by