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