我有一个不同字符串名称的向量;
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是否可以派上用场 - 或者使用开关盒...... ??
提前多多感谢!
答案 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