2015-11-02 135 views
1

我刚开始学习MATLAB(和所有重要的程序设计)。 我已经能够做一些关于标量,矢量和矩阵操作,索引,绘图和脚本的练习。当然,我只是在尝试非常基础的水平练习。我跑到这一个,并没有能够解决它:如何用一个字符串向量的元素替换一个向量的特定元素?

我有一个17x1列矢量由1到5之间的整数,它代表了一组学生的平均成绩。我必须用字母F,D,C,B,A来替换数字,以便现在以字母表示成绩。等

grades(grades == 1) = 'F' 
    grades(grades == 2) = 'D' 

而且,但我几乎可以肯定,这不是最有效的方法,也不是由课程(我使用一个预期: 现在,我可以用一个非常简单的方法MIT的开放课程)。特别由于提示之一是创建一个字符串矢量:

letters = 'FDCBA' 

此外,这取代了1〜5的整数65至70的整数(而不是字母)。所以,我的问题是,有没有一个简洁的方法来做到这一点?我知道在这种情况下,不管我是否有几行额外的代码都不是那么重要,但我仍然想知道在这个练习中矢量字母的作用。也许:

grades(grades == 1) = letters(1) 

或者使用一个循环和一个辅助变量来取代的等级等于数“k”字母的第k个元件元素。虽然第一个讲座没有提到循环,但我想有一个简明的方法来使用基本的索引函数和向量操作来完成这个任务。 我提前道歉,我知道这可能是一个非常基本的问题。

回答

2

结果保存在一个新的变量,你已经表现出了很大的努力,我会尝试清除一些东西给你。用65到70代替1到5是由于ASCII表代表所有具有整数的字符。正如你有一个整数数组,MATLAB将用它的数字ASCII值转换字符。你可以反转char(65:70) = ABCDEF;

此外,你可以索引多次的成绩位置。 char_grades =letters(grades)将会诀窍。或者以错综复杂的方式做到这一点。

g = @(x) letters(x); 
char_grades = g(grades); 

因为你可能还不熟悉功能手柄,我可能会解释。我定义了一个函数g,它查找letters中某个等级的char值,并将其应用于等级矢量。这与上述基本相同,但可能有助于理解索引逻辑。

+1

非常感谢您的详细解释,它完全回答了问题本身,以及我遇到的其他问题。 @Grebu的答案也正是我所寻找的,我很欣赏建议为字符矢量创建一个新变量,而不是覆盖数字等级矢量。 –

1

直接与字母的最简单的方法是更换等级的数字:

grades = [ 1 2 3 5 4 3 2 4 5 4 3 5 4] % Numeric grades 
letters = 'FDCBA'  
grades = letters(grades) % Line 3 

它使用等级为指标在矢量字母的字符。 假设F对应于1 ... A对应于5.
这不是特别好的做法,因为它会将数值向量更改为char向量。最好通过更换代码行3

grades_char = letters(grades) 
相关问题