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

时间:2015-10-03 16:20:37

标签: matlab boolean naming

我有长度(C)的变量数。每个索引代表一种unqe类型的变量(在我的优化模型中),例如,它是发电,输电线路容量等。

但是,我有一个与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' (... 

有关如何使用字符串和数字命名C中的变量的任何建议,基于逻辑ID-vector?

谢谢!

1 个答案:

答案 0 :(得分:0)

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

您可以使用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。