Постройте несколько 2D-графиков, сохраненных в виде 3D-матрицы

Мне нужно объединить изрядное количество (~ 15000) участков на одной фигуре. Выполнение этого итеративно заняло бы вечность, поэтому я сохранил все свои данные в 3D-матрице, надеясь, что смогу построить все свои данные сразу.

Моя матричная структура выглядит следующим образом: Матричная структура

Итак, если я хочу отобразить первый график моей матрицы M, я набираю:

plot(M(:,1,1),M(:,2,1))

Естественно, чтобы отобразить все мои данные сразу, я попробовал:

plot(M(:,1,:),M(:,2,:))

Что дает мне следующую ошибку:

Error using plot
Data cannot have more than 2 dimensions.

Любые идеи о том, как я мог бы найти быстрый способ построить такие данные?

Вот пример кода:

M = rand(5,2,3);

for i = 1:1:size(M,3)
    M(:,1,i) = linspace(1,size(M,1),size(M,1));
%     plot(M(:,1,i),M(:,2,i))  % Plot iteratively --> Works but slow
%     hold on 
end

plot(M(:,1,:),M(:,2,:)) % --> Gives the error 'Data cannot have more than 2 dimensions.'

person Alan B.    schedule 11.09.2019    source источник


Ответы (1)


Самым простым решением является squeeze ваши данные, поскольку они по своей сути является двумерным, но просто переставлен:

plot( squeeze(M(:,1,:)), squeeze(M(:,2,:)) )

Матрица, подобная M(:,1,:), имеет размер 5x1x3, а squeeze удаляет промежуточное измерение размера 1, получая матрицу 5x3. Этого также можно добиться с помощью permute(M(:,1,:), [1,3,2]).

person Dev-iL    schedule 11.09.2019