2D логическая матрица из вектора координат (базовая матрица) - PullRequest
2 голосов
/ 21 ноября 2011

У меня есть 2D вектор, который содержит координаты, которые я хочу представить как True или единицу в матрице с размерами nxm.Могу ли я построить эту матрицу без цикла?

В настоящее время я делаю это:

points = [(1,1), (30, 20), (8,7)]
grid = zeros(n,m);

for i = 1:length(points)
    grid(points(i,1),points(i,2))=1;
end

Большое спасибо, я новичок в Matlab, и до сих пор не могу найти ответ.

Ответы [ 2 ]

6 голосов
/ 21 ноября 2011

Я рекомендую использовать разреженную матрицу, если число координат (length(points)) намного меньше (<10%), чем <code>n*m. Это позволит лучше использовать память и сэкономить ваше время.

points=[1,30,8;1,20,7];
grid = sparse(points(1,:), points(2,:), 1, n ,m);
3 голосов
/ 21 ноября 2011

Ваше присвоение точкам синтаксически неверно, оно должно быть:

points=[1,30,8;1,20,7];

Решение вашей проблемы заключается в преобразовании индексов в линейные индексы с sub2ind:

grid(sub2ind(size(grid),points(1,:),points(2,:)))=1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...