Obter os vizinhos de um elemento da matriz

Eu tenho uma matriz e para cada elemento eu quero obter o índice de seus elementos circundantes. Todos esses resultados devem ser armazenados em uma matriz da seguinte maneira. Cada linha da matriz corresponde a um elemento da matriz e cada uma das colunas dessa matriz contém os índices vizinhos. Por exemplo, para uma matriz 4x4, obteremos uma matriz de resultados 16x8. Alguns dos elementos da matriz não têm 8 vizinhos.

Existe um exemplo, acho que está funcionando, existe alguma maneira de evitar o loop ?:

ElementNeighbors = [];
for n = 1:numel(Matrix)
    NeighborsMask = [ n-1 n+1 n+size(matrix,1) n-size(Matrix,1) n-size(Matrix,1)-1 n-size(Matrix,1)+1 ...
        n+size(Matrix,1)-1 n+size(Matrix,1)+1 ];

    ElementNeighbors = [ElementNeighbors ; NeighborsMask ];
end
ElementNeighbors (ElementNeighbors ==0|ElementNeighbors <0) = NaN;

questionAnswers(1)

yourAnswerToTheQuestion