在MATLAB中:如何将字符串转换为向量/矩阵



一个人如何将字符串转换为向量/矩阵?例如,如果字符串为"选项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

听起来您本质上是在试图找到一种将给定字符串(即'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对象的情况下自己执行此操作,例如使用单元格数组:

    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

    确实是一个可怕的决定。但是还是一个选项。它要求您的Output字符串和变量名称在某种程度上是相关的(在这种情况下,从Output删除空间为您提供了您的变量名称(:

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

在我看来,做似乎要完成的工作的最简单方法是if语句。

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

等等,依此多待

最新更新