我刚刚开始学习MATLAB(以及所有重要的编程)。 我已经能够做一些关于标量,向量和矩阵运算,索引,绘图和脚本的练习。当然,我只是在尝试非常基础的练习。我遇到了这个,并且无法解决它:
我有一个17x1列向量,由1到5之间的整数组成,代表一组学生的平均成绩。我必须用字母F,D,C,B,A替换数字,以便等级现在是字母。 现在,我可以使用一种非常简单的方法:
grades(grades == 1) = 'F'
grades(grades == 2) = 'D'
依此类推,但我几乎可以肯定,这不是最有效的方法,也不是课程的目标(我使用麻省理工学院的一门公开课程)。特别是因为其中一个提示是创建一个字符串向量:
letters = 'FDCBA'
此外,这将使用65到70个整数(而不是字母)替换1到5个整数。所以,我的问题是,有一个简洁的方法来做到这一点?我知道在这种特殊情况下,我是否有一些额外的代码行并不是那么重要,但我仍然想知道它的作用是什么。本练习中的矢量字母。也许:
grades(grades == 1) = letters(1)
或者使用循环和辅助变量用 kth 替换等于' k' 的成绩元素字母的元素。虽然第一堂课没有提到循环,但我想使用基本的索引函数和向量操作可以做到这一点的简洁方法。 我提前道歉,我知道这可能是一个非常基本的问题。
答案 0 :(得分: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 :(得分: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向量。最好通过用
grades_char = letters(grades)