Как и в моем предыдущем вопросе Я пытаюсь вставить маленькие квадратные матрицы вдоль диагонали большой матрицы. Однако эти матрицы теперь содержатся в трехмерном массиве и имеют разные значения. Как и прежде, необходимо добавлять перекрывающиеся значения, а маленькие матрицы вставляются только в том случае, если они могут полностью поместиться внутри большой матрицы. Размер шага всегда будет равен 1.
Я получил ответ, используя циклы for, но пытаюсь векторизовать этот код для эффективности. Как бы я это сделал? Текущий код без кода показан ниже.
function M = TestDiagonal2()
N = 10;
n = 2;
maxRand = 3;
deepMiniM = randi(maxRand,n,n,N+1-n);
M = zeros(N);
for i = 1:N+1-n
M(i:i+n-1,i:i+n-1) = M(i:i+n-1,i:i+n-1) + deepMiniM(:,:,i);
end
end
Желаемый результат - матрица N
x N
с заполненными n+1
диагоналями:
3 1 0 0 0 0 0 0 0 0
4 5 3 0 0 0 0 0 0 0
0 3 3 3 0 0 0 0 0 0
0 0 1 6 3 0 0 0 0 0
0 0 0 4 4 4 0 0 0 0
0 0 0 0 2 3 2 0 0 0
0 0 0 0 0 2 6 2 0 0
0 0 0 0 0 0 4 2 2 0
0 0 0 0 0 0 0 3 3 1
0 0 0 0 0 0 0 0 3 3