In Matlab, habe ich eine Matrix A von nicht negativen Einträgen. Siehe die folgende:Finden Sie die Nachbarn aller Nullen Elemente in einer Matrix
Ich möchte die Nachbarn aller Nullelemente erwarten das Nullelement. Dies bedeutet, dass ich in einem Vektor v die Nachbarn von A (1, 1), A (2, 5), A (3, 1), A (3, 6), A (4, 5) und A (5, 1) und wenn einer dieser Nachbarn Null ist, dann speichere ich ihn nicht.
Mit Nachbarn von Element (i, j) meine ich die Elemente, die weit entfernt von (i, j) um ein Element sind, dh A (i, j + 1), A (i, j-1) , A (i-1, j), A (i-1, j-1), A (i-1, j + 1), A (i + 1, j), A (i + 1, j-1), und A (i + 1, j + 1). Jedes Element (i, j) hat 7 Nachbarn.
Ich speichere keine Wiederholungselemente. Das heißt, wenn zum Beispiel A (1, 1) = 0 und A (1,3) = 0 und A (1,2) = 1 ist, werde ich A (1, 2) nur einmal speichern.
In meinem vorherigen Beispiel der Vektor v wird diese:
v=[2 1 8 1 2 4 5 2 9 8 5 5 8 4 6 5 8 3];
Wie dies ohne Schleifen in Matlab zu tun?
Das ist mein Code für quadratische Matrix: cl_ ist die Zahl der Null in meiner Matrix. ix_ ist der Zeilenindex der Nullelemente und iy_ ist der Spaltenindex der Nullelemente.
for i_=1:length(cl_)
ixn1_(1:2)=ix_(i_);
ixn2_(1:3)=ix_(i_)-1;
ixn3_(1:3)=ix_(i_)+1;
iyn1_=iy_(i_)-1;
iyn2_=iy_(i_)+1;
iyn3_(1:3)=[iy_(i_)-1, iy_(i_), iy_(i_)+1];
ixn_{i_}=[ixn1_, ixn2_, ixn3_];
iyn_{i_}=[iyn1_, iyn2_, repmat(iyn3_, 1, 2)];
end
% find the neighbors
@LuisMendo Ich habe meine Frage aktualisiert. – npisinp