在Matlab中:如何将字符串转换为矢量/矩阵?

时间:2017-06-26 14:11:29

标签: string matlab vector char

如何将字符串转换为矢量/矩阵? 例如,如果字符串是“选项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

2 个答案:

答案 0 :(得分:1)

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

  • 使用switch声明:

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

    注意我将3*Time 放在的开关案例中,而不是先将其计算为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

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

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

答案 1 :(得分:-2)

在我看来,做你想要完成的事情的最简单方法是if语句。

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

等等你的其他选择