根据已存在的逻辑 ID 向量 (MATLAB) 为每个变量命名

Give each variable a name based on an already existing logical-ID vector (MATLAB)

我有 length(C) 个变量。每个索引代表一个唯一类型的变量(在我的优化模型中),例如无论是发电量,输电线路容量等..

但是,我有一个与 C(所有变量)长度相同的逻辑向量,表明它是否是例如世代:

% length(genoidx)=length(C), i.e. the number of variables
genoidx = [1 1 1 1 1 1 0 0 ... 1 1 1 1 1 1 0 0]

在本例中,2 个时间步有 6 个生成器,共计 12 个变量。

我想为每个变量命名,以便更好地了解优化模型的输出,f.ex。像这样:

% This is only a try on pseudo coding
varname = cell(length(C),1)
varname(genoidx) = 'geno' (1 2 3 4 5 6 ... 1 2 3 4 5 6)
varname(lineidx) = 'line' (... 

关于如何根据逻辑 ID 向量在 C 中用字符串和数字命名变量有什么建议吗?

谢谢!

使用动态名称可能可以在工作区中查看计算结果,但如果有任何代码要读取它们,我不会使用它们。

您可以使用 assignin('base') 函数来执行此操作。

我不太确定你的伪代码试图做什么,但你可以这样做:

>> varname={'aaa','bbb','ccc','ddd'}

varname = 

    'aaa'    'bbb'    'ccc'    'ddd'

>> genoidx=logical([1,0,1,1])

genoidx =

     1     0     1     1

>> assignin('base', sprintf('%s_',varname{genoidx}), 22)

这将在工作区中创建变量 aaa_ccc_ddd_ 并将数字 22 分配给它。

或者您可以使用如下表达式:

sum(genoidx.*(length(genoidx):-1:1))

计算十进制值并为自定义名称的元胞数组编制索引:

>> varname={'aaa','bbb','ccc','ddd','eee','fff','ggg','hhh'}

varname = 

    'aaa'    'bbb'    'ccc'    'ddd'    'eee'    'fff'    'ggg'    'hhh'

>> assignin('base', varname{sum(genoidx.*(length(genoidx):-1:1))}, 33)

这将创建变量 ggg 并将 33 赋给它。