2017-03-21 4 views
0

Ich versuche, 70 Punkte (die als Knoten angesehen werden können) zu kennzeichnen, deren Koordinaten in einer Matrix mit zwei Spalten enthalten sind. In Labelize meine ich jeweils eine Nummer zu wählen und zum Beispiel eine Matrix mit drei Spalten zu erhalten, wobei die ersten beiden immer die Koordinaten sind und die dritte das LabelWie beschriftet man Punkte?

Ich sah in der doc labelnode und zum Beispiel aber ich habe für diese Funktionen nicht die richtige Version von Matlab (ich benutze R2015a). Und labelmatrix oder bwlabel transformiert meine Matrix von Koordinaten in eine Matrix von 1.

Wie kann ich tun?

317 948 
319 935 
320 969 
320 969 
326 916 
+1

Meinst du so etwas wie [Text] (https://www.mathworks.com/help/matlab/ref/text.html) ? Können Sie bitte ein Codebeispiel zu Ihrer Frage hinzufügen (3 Punkte Beispiel sollte ausreichen)? – Rotem

+0

ja kann ich: erste Spalte ist X und zweite Y. Ich möchte ein Label für jede Zeile –

+0

Müssen die Etiketten Strings sein? Oder Zahlen sind gut? Müssen sie einzigartig und steigend sein? – UJIN

Antwort

1

Ich bin mir nicht ganz sicher, ob ich dein Problem richtig verstanden habe. Für das, was ich verstanden habe, können Sie einfach eine Spalte mit eindeutigen Zahlen zu Ihren Daten hinzufügen. Wenn wir Ihre Daten sagen wird X in Matrix gespeichert sind, können Sie tun:

labels = 1:size(X,1); % generate a vector of integers from 1 to number of rows of X 
X = [X, labels']; % concatenate the matrix X and the vector of labels 

% X = [ 317 948 1 
%  319 935 2 
%  320 969 3 
%  320 969 4 
%  326 916 5 
%  .........] 

Wenn Sie stattdessen die gleiche Label für Punkte mit den gleichen Koordinaten möchten, können Sie unique verwenden, um diese Etiketten zu generieren:

[~, ~, labels] = unique(X, 'rows'); 
X = [X, labels]; 


% X = [ 317 948 1 
%  319 935 2 
%  320 969 3 
%  320 969 3 
%  326 916 4 
%  .........] 
+0

Ihre zweite Lösung ist die richtige Lösung, aber mit X = [X, Etiketten] und nicht X = [X, Etiketten ']. Danke :-D –

+0

Ja, mein Fehler! Korrigiert. – UJIN

1

Es gibt viele Möglichkeiten, dies zu tun.

  1. Verwenden Sie einfach numerische Array mit numerischen Beschriftungen. Sie können dies leicht an vorhandene Tabelle anhängen.

    arr(:,3) = labels; 
    
  2. können Sie Zellenfeld verwenden, 1 und 2 würden Zahlen und 3 würde dann Zeichenfolge für Label sein.

    arrWL = cell(size(arr,1), 3); 
    arrWL{:,1:2} = arr; 
    arrWL{:,3} = labels; 
    
  3. Sie können auch table verwenden, um Zeilen und Spalten zu beschriften.

    X = arr(:,1); 
    Y = arr(:,2); 
    arrWL = table(X, Y, 'RowNames', labels); 
    
  4. sowohl Daten Setzen und Labels zusammen als getrennte Einträge in einem Zellenarray (mit 2 Elementen).

    arrWL = {arr, labels}; 
    

könnte ich wahrscheinlich einige andere Optionen denken, wenn keine dieser geeignet sind.

Nun erzeugen eindeutige Nummern für Etiketten, Verwendung:

[~,~,positions] = unique(arr, 'rows', 'stable'); 
% I prefer stable so the first point gets index 1 etc. 
+0

Können Sie bitte Codebeispiel hinzufügen? – Rotem

Verwandte Themen