2011-04-14 147 views
3

这是我的问题。 我做了一个算法,使某些单词的排列。我用一个数值替换每个单词,这样我就可以对它们进行算术运算(例如1 ='香蕉'2 ='孩子'3 ='汽车'4 ='树'等)。 假设运行一个算法后,matlab给了我这个矩阵作为结果: ans = [2,2,1; 4,3,3] 我永远无法知道的是如何告诉他 - 用符号替代数字并且写下:如何将数字结果转换为符号或字符串?

ans = [child,child,banana;树,车,车] - 所以我不必查看图表中的每个数字,并用相应的单词替换它!?

回答

1

如果你有你这句话的数组,并与指数另一个数组,可以产生与对应的字,像这样替换各项指标的数组:

words = {'banana','child','car','tree'}; 

numbers = [2 2 1;4 3 3]; 

>> words(numbers) 
ans = 
    'child' 'child' 'banana' 
    'tree'  'car'  'car' 
+0

狗屎 - 我用了零!现在怎么办?!它说下标指数必须是真正的正整数或逻辑。我真的想避免重写算法中的所有命令......如果可能的话 – Davor 2011-04-14 17:58:19

+0

@Davor:如果代码只是从0开始而不是1开始计数,那么使用'numbers + 1'来索引。如果零表示空格或虚拟单词,请在虚拟单词前面加上“单词”,并使用“数字+ 1”进行索引。 – Jonas 2011-04-14 18:12:06

+0

非常感谢 - 我写了A = ones(m,n),并将它添加到我使用的矩阵中 - 它功能非常好。我终于可以从我的作品开始。 – Davor 2011-04-14 19:21:49

1

您还可以使用ordinal数据类型如果你有统计工具箱。

>> B = ordinal([2 2 0; 4 3 3], {'banana','child','car','tree'}) 
B = 
    child  child  banana 
    tree  car  car  

请注意,它会自动处理零。然后你可以做这样的事情:

>> B=='child' 
ans = 
    1  1  0 
    0  0  0 
+0

哦,谢谢你丰富的C!我希望你不介意,但我已经给乔纳斯投了票。这也很有帮助。 – Davor 2011-04-14 21:42:01

+0

很整洁!不知道这个功能。看起来像索引<= 1,它设置为第一个标签和索引> =最大#标签,将其设置为最后一个标签。例如,用“-1 -1 5”代替第一行返回“香蕉香蕉树”。 – abcd 2011-04-15 17:07:55

+0

@yoda:矩阵中的#个唯一元素必须与标签的数量相匹配。该分配基于排序的“排序”矩阵中的独特元素。如果你的数据没有自然顺序,你可以使用catagorical数组。 – 2011-04-15 17:23:09

相关问题