Мне нужно написать код, который сканирует матрицу от самого левого и нижнего элемента вправо, перемещаясь по диагонали.
Например, для матрицы [1 2 3; 4 5 6] должно возвращаться 4,5,1,6,2,3
Есть идеи, с чего начать?
Решение с использованием spdiags *:
x = [1 2 3; 4 5 6]; result = x(nonzeros(flipud(spdiags(reshape(1:numel(x),size(x))))));
* Это может быть не так быстро, как решение @ LuisMendo, но это один лайнер!
Поскольку вы не показывали свои попытки, я позволю вам выяснить, как работает этот код: -)
x = [1 2 3; 4 5 6]; m = bsxfun(@minus, (1:size(x,1)).', 1:size(x,2)); [~, ind] = sort(reshape(m, 1, [])); result = x(flip(ind));
Возможно, вам придется прочитать о
bsxfun