2017-09-06 1 views
0

Quelqu'un peut-il expliquer les deux lignes de code mises en évidence ci-dessous qui utilisent repmat? Ceci est pris directement à partir des MathWorks documentation for learning data analysis:Matlab: explication du code repmat

bin_counts = hist(c3); % Histogram bin counts 
N = max(bin_counts); % Maximum bin count 
mu3 = mean(c3);   % Data mean 
sigma3 = std(c3);  % Data standard deviation 

hist(c3) % Plot histogram 
hold on 
plot([mu3 mu3],[0 N],'r','LineWidth',2) % Mean 
% -------------------------------------------------------------- 
X = repmat(mu3+(1:2)*sigma3,2,1);  % WHAT IS THIS? 
Y = repmat([0;N],1,2);     % WHY IS THIS NECESSARY? 
% -------------------------------------------------------------- 
plot(X,Y,'g','LineWidth',2) % Standard deviations 
legend('Data','Mean','Stds') 
hold off 

Quelqu'un pourrait-il expliquer la ligne X = repmat(...) à moi? Je sais qu'il sera tracé pour les lignes d'écart-type 1 et 2.

En outre, j'ai essayé de commenter la ligne Y = ..., et l'intrigue ressemble exactement la même chose, alors quel est le but de cette ligne?

Merci

Répondre

2

permet de diviser l'expression en plusieurs états

X = repmat(mu3+(1:2)*sigma3,2,1); 

est équivalente à

% First create a row vector containing one and two standard deviations from the mean. 
% This is equivalent to xvals = [mu3+1*sigma3, mu3+2*sigma3]; 
xval = mu3 + (1:2)*sigma3; 

% Repeat the matrix twice in the vertical dimension. We want to plot two vertical 
% lines so the first and second point should be equal so we just use repmat to repeat them. 
% This is equivalent to 
% X = [xvals; 
%  xvals]; 
X = repmat(xval,2,1); 

% To help understand how repmat works, if we had X = repmat(xval,3,2) we would get 
% X = [xval, xval; 
%  xval, xval; 
%  xval, xval]; 

La logique est similaire à la matrice Y sauf qu'il répète dans la direction de colonne. Ensemble, vous vous retrouvez avec

X = [mu3+1*sigma3, mu3+2*sigma3; 
    mu3+1*sigma3, mu3+2*sigma3]; 
Y = [0, 0; 
    N, N]; 

Lorsque parcelle est appelé trace une ligne par colonne des matrices X et Y.

plot(X,Y,'g','LineWidth',2); 

est équivalent à

plot([mu3+1*sigma3; mu3+1*sigma3], [0, N], 'g','LineWidth',2); 
hold on; 
plot([mu3+2*sigma3; mu3+2*sigma3], [0, N], 'g','LineWidth',2); 

qui trace deux lignes verticales, l'une et de deux écarts types de la moyenne. Si vous commentez Y, Y n'est pas défini. La raison pour laquelle le code fonctionne encore est probablement que la valeur précédente de Y était encore stockée dans l'espace de travail. Si vous exécutez la commande clear avant d'exécuter à nouveau le script, vous constaterez que la commande plot échouera.