获取匹配向量中字符串的相应字符串的索引

时间:2013-11-10 07:13:38

标签: string matlab indexing matching

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

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是否可以派上用场 - 或者使用开关盒...... ??

提前多多感谢!

1 个答案:

答案 0 :(得分: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

无比较运算符中的数字是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