Как построить матрицу в Matlab, рассматривая матричные индексы как координаты на оси XY - PullRequest
1 голос
/ 08 июня 2019

В моем следующем коде регион представляет собой матрицу 1000x1500. Я хочу нанести значения этой матрицы на диаграмму X-Y. Итак, моя гипотетическая диаграмма состоит из значений X от 1: 1000 и значений Y от 1: 1500.

function plotRegion(region)
    figure;
    [a,b]=size(region);
    hold on;

    for i=1:a
        for j=1:b
            if(region(i,j)>0)
                plot(i,j ,'.' );
            end
        end
    end
    hold off;
end

Я перебираю каждое значение матрицы и всякий раз, когда вижу значение больше 0, я ставлю точку на своем графике. Хотя приведенный выше код работает, на моем компьютере для его запуска требуется примерно 70 секунд.

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

Пример вывода моего кода участка: enter image description here

1 Ответ

1 голос
/ 08 июня 2019

Вы можете использовать find вместо итерации region и использовать scatter вместо plot

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

[Y, X] = find(region > 0);
plot(X, Y, '.')

Если вы хотите сохранить цвета:
Все еще занимает много времени ...

[Y, X] = find(region > 0);

for i = 1:length(X)
    plot(X(i), Y(i), '.' );
end

Попробуйте использовать scatter вместо plot.
scatter больше подходит для нанесения точек:

[Y, X] = find(region > 0);    
C = 1:length(X); %Colors
C = mod(C, 7);   %Try to fix the colors
scatter(X, Y, [], C, '.');
...