首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据已经存在的逻辑ID向量(MATLAB)给每个变量一个名称。

根据已经存在的逻辑ID向量(MATLAB)给每个变量一个名称。
EN

Stack Overflow用户
提问于 2015-10-03 16:20:37
回答 1查看 58关注 0票数 0

我有长度(C)变量数。每个指标代表单一类型的变量(在我的优化模型中),例如:发电量、输电线路容量等。

但是,我有一个逻辑向量,其长度与C(所有变量)相同,表示它是否为例如生成:

代码语言:javascript
复制
% 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]

在这种情况下,有6个发电机分2个时间步骤,共计12个变量。

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

代码语言:javascript
复制
% 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中的变量命名为字符串和数字,有什么建议吗?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-06 10:22:54

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

您可以使用转让人(‘base’)函数来完成这个任务。

我不太确定您的伪代码正在尝试做什么,但是您可以这样做:

代码语言:javascript
复制
>> 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分配给它。

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

代码语言:javascript
复制
sum(genoidx.*(length(genoidx):-1:1))

要计算十进制值和索引定制名称的单元格数组,请执行以下操作:

代码语言:javascript
复制
>> 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赋值给它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32924752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档