【问题标题】:get index for corresponding string matching a string within a vector获取与向量中的字符串匹配的相应字符串的索引
【发布时间】:2013-11-22 03:00:35
【问题描述】:

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

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 是否可以方便使用 - 或者使用 switch case.. ??

提前非常感谢!

【问题讨论】:

    标签: string matlab indexing matching


    【解决方案1】:

    它已经为你完成了。只需使用 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 中唯一元素的位置。例如,您的数组中有四个“alex”(存储在 un_a{1} 中)的位置 1、2、4、10,因此您将 b(1)=10 作为其中一个的索引(最后一个,但我不是确保这已记录在案,它可能来自搜索算法)。如果你想获取其他索引,你可以这样做:

    alex_idx = find( m==m(b(1)) )
    alex_idx =
    
     1
     2
     4
    10
    

    【讨论】:

    • 甜!!谢谢!抱歉,我应该进一步阅读独特的功能和相关的语法——我不知道它还有更多的语法。但是,我想了解这里的“b”?这个“b”代表什么?
    • 非常感谢!所以 b 随机给了我一个我可以找到的位置,例如'亚历克斯'
    • 它不是随机的。它实际上已记录在案,因此您可以将最后一个参数添加到 unique 函数,如下所示:unique(...,'first') 或 unique(...,'last')(这是默认值)以方便您返回第一个或最后一个索引。
    猜你喜欢
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多