在Matlab中自动命名和连接单独创建的字符串,数字和向量

时间:2017-08-07 11:57:07

标签: matlab vector concatenation string-concatenation

我写了一个示例代码来说明我的问题 - 见下文。我有几个操作,每个操作由不同的服务器独立执行(不仅如示例中的4,而且更多)。我想......

1)自动命名结果,以便我可以使用更长的时间,部分年份和工厂类型(例如,当Year = 2008时,将变量命名为“string200811”,PartOfYear = 1,PlantType = 1等)

2)自动化连接(如下面代码中的串联)。

如果有什么不清楚,请告诉我!

{{1}}

1 个答案:

答案 0 :(得分:2)

目前还不清楚你是如何初始化每个"操作"并存储结果。你应该只返回一些struct或cell数组对象。

生成结构的函数:

% Operation x
function myStruct = createStruct()
    % ... other functionality here which actually generates the data values
    myStruct.Year = 2008;
    myStruct.PartOfYear = 2;
    myStruct.PlantType = 2;
    myStruct.String = 'randomstring';
    myStruct.Number = 0.5;
    myStruct.Vector = 1:4;
end

然后将所有结构放在单元格数组中

% Generate structs and store in a cell array
myCellArray = cell(4,5);
myVectors = zeros(4,4);
for ii = 1:4
    tempStruct = createStruct();
    myCellArray{ii, 1} = tempStruct.Year;
    myCellArray{ii, 2} = tempStruct.PartOfYear;
    myCellArray{ii, 3} = tempStruct.PlantType;
    myCellArray{ii, 4} = tempStruct.String;
    myCellArray{ii, 5} = tempStruct.Number;
    myVectors(ii,:) = tempStruct.Vector;
end

您可以使用类似性质的createStruct函数替换createCellArray函数。这样就可以快捷地分配循环中的各个字段,但如果实际数据更复杂(可以跟踪更多字段),可能会使事情变得不那么清楚。

作为一般规则,自动命名变量是一个坏主意。你可以这样做(例如使用eval函数),但它很笨拙,速度慢,并且要求调试问题和用户丢失变量跟踪。将事物存储在通用结构或单元阵列中对于可用性和维护来说要好得多。