使用Strcat创建动态变量名

时间:2012-01-31 15:20:52

标签: matlab eval

我有一个过程会对存储在不同文件夹中的一组数据重复。每次处理某个文件夹数据时,我需要新的变量名称,因为我需要在初始处理完成后将结果分开以进行更多处理。 例如,在重复函数的每个新块的开头,我声明了数组

Set_1 = zeros(dim, number);

vectors_1 = zeros(dim, number);

对于我需要的下一组数据:

`Set_2 = .........`

等等。将会有很多这些集合,所以我需要一种方法来自动创建这些变量,并在函数中使用新的变量名称,同时在完成所有函数后保持它们是分开的。

我首先尝试使用strcat('Set_1',int2str(number)) = zeros(dim, number),但这不起作用,我相信因为这意味着我会尝试将数组设置为字符串。我敢肯定必须有一种方法可以创建一个函数并动态创建变量,但它似乎超出了我的范围,所以它可能非常明显,所以如果有人能告诉我一个很棒的方法。

3 个答案:

答案 0 :(得分:10)

我不是这样做的。这是一个坏习惯,最好使用单元格数组或结构来保存多个集合。每个字段的开销很小(大小方面),但稍后维护起来会容易得多。

如果你真的,真的想这样做,请在你编写的字符串上使用eval

答案 1 :(得分:4)

MATLAB函数genvarname可以满足您的需求。在你的情况下,它看起来像:

eval(genvarname('Set_', who)) = zeros(dim, number);

但是,我会遵循先前答案的建议,并使用单元格或结构来存储结果。

答案 2 :(得分:3)

这种模式被认为是有害的,因为它需要eval功能。有关避免它的技术,请参阅以下其中一项:

如果您坚持使用eval,请使用以下内容:

eval(sprintf('Set_1%d = zeros(dim, number);', number))