我尝试标记70个点(可以看作是节点),其坐标包含在具有两列的矩阵中。在标注中我的意思是适合每一个数字,例如获得一个有三列的矩阵,其中前两个总是坐标,第三个是标签
我在文档labelnode
和graph
中看到过,但我没有正确版本的matlab用于这些功能(我使用R2015a)。 labelmatrix
或bwlabel
将我的坐标矩阵转换为1的矩阵。
我该怎么办?
317 948
319 935
320 969
320 969
326 916
答案 0 :(得分: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
% .........]
答案 1 :(得分:1)
有很多方法可以做到这一点。
只需使用带数字标签的数字数组即可。您可以轻松地将其附加到现有表格。
arr(:,3) = labels;
您可以使用单元格数组,1和2将是数字,3则是标签的字符串。
arrWL = cell(size(arr,1), 3);
arrWL{:,1:2} = arr;
arrWL{:,3} = labels;
您还可以使用table
标记行和列。
X = arr(:,1);
Y = arr(:,2);
arrWL = table(X, Y, 'RowNames', labels);
将数据和标签作为单独的条目放在一个单元格数组中(包含2个元素)。
arrWL = {arr, labels};
如果这些选项都不合适,我可能会想到其他一些选择。
现在,要为标签生成唯一编号,请使用:
[~,~,positions] = unique(arr, 'rows', 'stable');
% I prefer stable so the first point gets index 1 etc.