МАТЛАБ: Существует ли разумный способ удалить соседние (x, y) точки, хранящиеся в каком-либо массиве? - PullRequest
0 голосов
/ 19 февраля 2020

Есть ли? Я имею в виду конкретный матричный массив, в котором строки соответствуют координатам x и y, например,

4 3
4 5
5 4
3 4
4 4

, такие, что (4,3) и (4,5) et c. являются (x, y) точками. Проблема заключается в следующем: если одна из точек в списке окружена рядом с другими точками в списке, например,

(~,~) (4,5) (~,~)
(3,4) (4,4) (5,4)
(~,~) (4,3) (~,~)

, как в случае списка выше, то я хотел бы удалить его каким-то эффективным способом. Очень легко увидеть визуально, удовлетворено ли это каким-то моментом, но как мне сделать это в коде? Я просто ищу некоторые предложения, поэтому, если кто-то сталкивался с этой проблемой ранее или у меня есть какие-либо комментарии, я был бы признателен, чтобы прочитать ее!

С уважением,

1 Ответ

1 голос
/ 19 февраля 2020

Я не уверен, что вы можете избежать зацикливания здесь (не уверен, что это то, что вы имели в виду под эффективностью в любом случае ...). По крайней мере, я не придумал решение без петель на макушке, но это должно сработать.

vec = [4 3; 4 5; 5 4; 3 4; 4 4; 6 7; 6 8; 6 6; 5 7; 7 7];
for i = 1:length(vec)
    point = vec(i,:);
    mat = vec-point;
    % Calculate diagonal values of the matrix product
    % Note that sum(mat.*mat,2) might be a bit faster. You can try yourself.
    tmp = diag(mat*mat');
    if (length(find(tmp == 1)) == 4)
        % If we find 4 values of 1 in tmp, the point is surrounded
        % E.g., remove the value here if you wish
        point
    end
end

edit: Кроме того, обратите внимание, что это не будет работать должным образом, если у вас есть дубликат точки в векторе.

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