2017-03-21 16 views
0

2つの列を持つ行列に座標が含まれる70点(ノードと見なすことができます)にラベル付けしようとします。ラベル付けでは、それぞれの数値にそれぞれ適切な値を設定します。たとえば、最初の2つは常に座標と3番目のラベルの行列を取得することを意味します。ポイントにラベルを付けるには?

およびこれらの関数のための適切なバージョンのmatlabを持っていない(私はR2015aを使う)。そしてlabelmatrixまたはbwlabelは、私の座標の行列を1の行列に変換します。

どうすればいいですか?

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

あなたは[テキスト](https://www.mathworks.com/help/matlab/ref/text.html)のようなものを意味しますか?あなたの質問にコードサンプルを追加してください(3ポイントの例で十分でしょう)? – Rotem

+0

はいできます:最初の列はXと2番目のYです。各行のラベルが必要です –

+0

ラベルは文字列でなければなりませんか?または数字は問題ありませんか?彼らはユニークで増加しなければなりませんか? – UJIN

答えて

1

あなたの問題が正しいかどうかは完全にはわかりません。私が理解したところでは、データに一意の数値の列を追加するだけです。私たちはあなたのデータは行列Xに保存されていると言うならば、あなたが行うことができます:

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 
%  .........] 

を使用すると、同じ座標を持つ点に対して同じラベル、あなたはこれらのラベルを生成するためにuniqueを使用することができますをしたいの代わり場合:

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


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

あなたの2番目のソリューションは正しい解決策ですが、X = [X、labels]ではなく、X = [X、labels ']ではありません。ありがとう:-D –

+0

ええ、私の間違い!修正されました。 – UJIN

1

これを行う方法はたくさんあります。

  1. 数値ラベルの数値配列を使用してください。これを既存のテーブルに簡単に追加することができます。

    arr(:,3) = labels; 
    
  2. セル配列を使用すると、1と2は数字、3はラベルの文字列になります。

    arrWL = cell(size(arr,1), 3); 
    arrWL{:,1:2} = arr; 
    arrWL{:,3} = labels; 
    
  3. また、行と列のラベルにtableを使用することができます。

    X = arr(:,1); 
    Y = arr(:,2); 
    arrWL = table(X, Y, 'RowNames', labels); 
    
  4. データとラベルの両方を別々のエントリとしてセル配列に入れます(2要素)。

    arrWL = {arr, labels}; 
    

これらのどれが適していない場合、私はおそらくいくつかの他のオプションを考えることができます。今

、ラベル、使用のための固有の番号を生成する:

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

コードサンプルを追加できますか? – Rotem

関連する問題