0

我有一个不同字符串名称的向量;

A = {

    'alex'
    'alex'
    'sophie'
    'alex'
    'david'
    'sophie'
    'david'
    'david'
    'sophie'
    'alex' };

并且对应2个变量,可以说年龄和大小 type_age = [1:10]; type_size = [10:10:100];

我希望能够做类似的事情

 un_a = unique(A);
 f = find(A==un_a(1)); % I know this would work if I had numbers and not string..

 alex_age = type_age(f);
 alex_size = type_size(f);

 plot(alex_age,alex_size,'.r',sophie_age,sophie_size,'.b');

虽然上面只是一个例子,但我希望能够生成类似的东西来为每个名称制作不同颜色的变量散点图。

所以我卡住的地方是在我的字符串数组中获取相应唯一名称的索引(f)。

另一方面,如果有更简单的方法,请告诉我。事实上,我有一个庞大的数据集。

另外我不知道 strcmp 是否可以方便地在那里使用 - 或者使用开关盒.. ??

提前非常感谢!

4

1 回答 1

0

它已经为你完成了。只需使用unique函数的完整语法:

[un_a,b,m] = unique(A);

现在

un_a = 

'alex'
'david'
'sophie'


b =

10
 8
 9


m =

 1
 1
 3
 1
 2
 3
 2
 2
 3
 1

使用m您可以从其他相关数组中提取数据,如下所示:

>> alex_age = type_age( m==1 )
alex_age =

 1     2     4    10

>> david_age = type_age( m==2 )
david_age =

 5     7     8

>> sophie_age = type_age( m==3 )
sophie_age =

 3     6     9

None 表示比较运算符中的数字是un_a数组中相应名称的索引。

编辑 @sophie,在您的上下文中un_a = A(b)b保留原始数组中唯一元素的位置A。例如,您的数组中的位置 1、2、4、10 有四个“alex”(存储un_a{1}b(1)=10可能来自搜索算法)。如果您想获得其他索引,您可以这样做:

alex_idx = find( m==m(b(1)) )
alex_idx =

 1
 2
 4
10
于 2013-11-10T07:56:01.540 回答