【问题标题】:How to replace specific elements of a vector with elements of a string vector?如何用字符串向量的元素替换向量的特定元素?
【发布时间】:2016-02-01 19:46:11
【问题描述】:

我刚刚开始学习 MATLAB(以及所有重要的编程)。 我已经能够做一些关于标量、向量和矩阵运算、索引、绘图和脚本的练习。当然,我只是在尝试非常基础的练习。我遇到了这个,一直没能解决:

我有一个 17x1 的列向量,由 1 到 5 之间的整数组成,代表一组学生的平均成绩。我必须用字母 F、D、C、B、A 替换数字,以便成绩现在用字母表示。 现在,我可以使用一个非常简单的方法:

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

等等,但我几乎可以肯定这不是最有效的方法,也不是课程的预期(我正在使用麻省理工学院的开放课程之一)。特别是因为其中一个提示是创建一个字符串向量:

    letters = 'FDCBA'

此外,这会将 1 到 5 个整数替换为 65 到 70 个整数(而不是字母)。所以,我的问题是,有没有一种简洁的方法来做到这一点?我知道在这种特殊情况下,我是否有几行额外的代码并不那么重要,但我仍然想了解向量 letters 在这个练习。也许:

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

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

【问题讨论】:

    标签: string matlab vector indexing


    【解决方案1】:

    由于您已经付出了很多努力,我会尽力为您解决一些问题。将 1 到 5 替换为 65 到 70 是由于 ASCII 表用整数表示所有字符。由于您有一个整数数组,MATLAB 将使用其数字 ASCII 值转换字符。您可以使用 char(65:70) = ABCDEF; 来反转它

    您还可以多次索引成绩的位置。 char_grades =letters(grades) 会成功的。或者以一种复杂的方式来做。

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

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

    【讨论】:

    • 非常感谢您的详细解释,它完全回答了问题本身,以及我遇到的其他问题。 @Grebu 的答案也正是我想要的,我很欣赏为字符向量创建一个新变量而不是覆盖数字等级向量的建议。
    【解决方案2】:

    将成绩中的数字直接替换为字母最简单的方法是:

    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。
    这不是特别好的做法,因为它将等级从数字向量更改为字符向量。最好将代码行 3 替换为

    ,将结果保存在新变量中
    grades_char = letters(grades) 
    

    【讨论】:

      猜你喜欢
      • 2016-08-16
      • 1970-01-01
      • 1970-01-01
      • 2011-10-07
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多