【问题标题】:In Matlab: How can one convert strings to use as a vector/matrix?在 Matlab 中:如何将字符串转换为向量/矩阵?
【发布时间】:2017-06-26 14:11:28
【问题描述】:

如何将字符串转换为向量/矩阵? 例如,如果字符串是“Option 3”(Type=Char),并且我有一个要绘制的向量:

Time=1:100; 
Option3=3*Time; 
Option4=5*Time;
plot(Time,Output) %Where the output=Option 3

如何做到这一点?这就是我想知道的原因,以及我从哪里得到的问题:https://www.mathworks.com/matlabcentral/fileexchange/35412-list-selection-dialog?s_tid=srchtitle

【问题讨论】:

  • 你想从字符串中提取数字吗?例如。如果字符串是 'Option3',则得到 3?。假设您的字符串中只有一个数字,您可以使用number = str2double(regexp(str, '\d+', 'match', 'once'));

标签: string matlab vector char


【解决方案1】:

听起来您实际上是在尝试找到一种将给定字符串(即'Option 3')映射到数据向量的方法。您可以采取多种方法。以下是一些:

  • 使用switch 声明:

    switch Output
      case 'Option_3'
        plot(Time, 3*Time);
      case 'Option _4'
        plot(Time, 5*Time);
    end
    

    请注意,我将3*Time in 放在了switch case 中,而不是先将其计算为Option3,然后在对plot 的调用中使用该变量。这可以节省内存,因为在需要绘图之前它不会为每个选项创建数据。如果您的变量(Option3 等)必须全部先创建,只需在 switch 语句中相应地替换它们即可。

  • 创建一个containers.Map 对象:

    您可以将所有向量及其相应的选项字符串放在地图中,然后使用选项字符串访问和绘制每个向量:

    optionMap = containers.Map({'Option 3', 'Option 4'}, {3*Time, 5*Time});
    ...
    Output = 'Option 3';
    plot(Time, optionMap(Output));
    

    这显然需要预先计算所有矢量数据以放入地图。您也可以在没有containers.Map 对象的情况下自己执行此操作,例如使用cell arrays

    options = {'Option 3', 'Option 4'};  % Cell array of possible option strings
    vectorData = {3*Time, 5*Time};       % Cell array of corresponding vectors
    ...
    Output = 'Option 3';
    plot(Time, vectorData{strcmp(options, Output)});
    
  • 使用eval

    horribledecisionreally。但仍然是一个选择。它要求您的 Output 字符串和您的变量名称以某种方式相关(在这种情况下,从 Output 中删除空格会为您提供变量名称):

    Output = 'Option 3';
    plot(Time, eval(strrep(Output, ' ', '')));  % Assumes Option3 variable exists
    

【讨论】:

    【解决方案2】:

    在我看来,完成您希望完成的事情的最简单方法是使用 if 语句。

    if ( return == 'Option 3')
        y = 3*Time;
    end
    plot(Time, y);
    

    其他选项以此类推

    【讨论】:

    • 那个if 声明不正确。 MATLAB 不会以这种方式比较字符串。请改用strcmpi
    • 另外,return 是保留关键字。尝试在这样的if 语句中使用它,甚至尝试为具有该名称的变量赋值,都会导致语法错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 2019-08-16
    • 1970-01-01
    相关资源
    最近更新 更多