繁体   English   中英

如何用字符串向量的元素替换向量的特定元素?

[英]How to replace specific elements of a vector with elements of a string vector?

我刚刚开始学习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)

或者使用循环和辅助变量将等于'k'等级元素替换为字母第k个元素。 虽然第一讲没有提到循环,但我想有一种简洁的方法可以使用基本的索引函数和向量操作来完成。 我提前道歉,我知道这可能是一个非常基本的问题。

正如您已经展示了很多努力,我将尝试为您清理一些事情。 用65到70替换1到5是由于ASCII表表示所有带整数的字符。 由于您有一个整数数组,MATLAB将使用其数字ASCII值转换字符。 你可以用char(65:70) = ABCDEF;来反转它char(65:70) = ABCDEF;

您还可以多次索引成绩的位置。 char_grades =letters(grades)可以解决问题。 或者以复杂的方式做到这一点。

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

由于你可能还不熟悉函数句柄,我可能会解释一下。 我定义了一个函数g ,它用letters查找成绩的char值并将其应用于成绩向量。 这基本上与上面相同,但可能有助于理解索引逻辑。

要用字母直接替换成绩中的数字,最简单的方法是:

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) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM