Сканирующие элементы матрицы - PullRequest
0 голосов
/ 04 июля 2018

Мне нужно написать код, который сканирует матрицу от самого левого и нижнего элемента вправо, перемещаясь по диагонали.

Например, для матрицы [1 2 3; 4 5 6] должно возвращаться 4,5,1,6,2,3

Есть идеи, с чего начать?

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Решение с использованием spdiags *:

x = [1 2 3; 4 5 6];
result = x(nonzeros(flipud(spdiags(reshape(1:numel(x),size(x))))));

* Это может быть не так быстро, как решение @ LuisMendo, но это один лайнер!

0 голосов
/ 04 июля 2018

Поскольку вы не показывали свои попытки, я позволю вам выяснить, как работает этот код: -)

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));

Возможно, вам придется прочитать о

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...