我有长度(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?
谢谢!
答案 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。