根据已存在的逻辑 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 赋给它。
我有 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 赋给它。