Реализация ответа Гуцчи как функции с большей гибкостью:
function mat_out = surround(mat_in, number, dis)
%mat_in: input matrix containing number
%number: number around which to build the output matrix
%dis: distance around searched number to crop in_matrix
%If dis is such that you would need to access values outside
%matrix, you will end up getting a non square matrix.
%find first position containing number in matrix:
[i, j] = find(mat_in==number, 1);
[len_row, len_col] = size(mat_in);
%make sure that I'm not accessing elements outside matrix
col = max((j-dis), 1):min((j+dis), len_col);
row = max((i-dis), 1):min((i+dis), len_col);
mat_out = mat_in(row, col);
, тогда, чтобы получить то, что вам нужно, вы должны сделать
B = surround(A, 6, 1)
, чтобы получить матрицу 3x3, содержащуюся вА, который имеет 6 в центре.В этой реализации вы также можете получить матрицу 5x5 (если A больше) с той же характеристикой, используя переменную dis
.Чтобы избежать коллизий, я написал это так, что вы найдете первое вхождение number
, но вы можете изменить его.
Обратите внимание, что если number
меньше, чем dis
чисел от концаматрица, как и число 2 в вашем A
, вы получите максимально возможную матрицу:
C = surround(A, 2, 1);
у вас будет
C = [1, 2, 3; 5, 6, 7]
Вы можете изменить код для заполнения с помощьюнули или что угодно, чтобы вы получили
C = [0, 0, 0; 1, 2, 3; 5, 6, 7]