【问题标题】:what's this matlab code doing?这个matlab代码在做什么?
【发布时间】:2012-02-24 10:46:48
【问题描述】:

我是 matlab 的新手,编写了以下代码:

datadir=('/.../prod/balanceSheet/DB/');

seriesnames = {'a.m','b.m','c.m','d.m','f.m','g.m','h.m','i.m'};

for proj=1:5;
database='';
switch proj
  case 1
    database=strcat(datadir,'scenario1');
  case 2
    database=strcat(datadir,'scenario2');
  case 3
    database=strcat(datadir,'scenario3');
  case 4
    database=strcat(datadir,'scenario4');
  case 5
    database=strcat(datadir,'scenario5');
end;

database;
gooddatanames={};
a=length(seriesnames);
for i=1:a
    gooddatanames={gooddatanames,database,seriesnames(i)};
end
end

这是我第一次使用开关。基本上我要做的是从数据库(1,2,3,...)中获取系列,以便所有系列都适用于所有场景。我错过了提取数据的功能,但上面的代码是否符合预期?

【问题讨论】:

    标签: matlab


    【解决方案1】:

    变化:

    gooddatanames={gooddatanames,database,seriesnames(i)};
    

    gooddatanames={gooddatanames{:},database,seriesnames{i}};
    

    并将gooddatanames = {} 移出循环,然后它会按照我的预期执行,即生成一个具有交替文件夹和文件名的 1x80 元胞数组。


    更有可能进行一些更改,如下所示:

    datadir=('/.../prod/balanceSheet/DB/');
    
    seriesnames = {'a.m','b.m','c.m','d.m','f.m','g.m','h.m','i.m'};
    gooddatanames={};
    
    for proj=1:5;
        database='';
        switch proj
            case 1
                database=fullfile(datadir,'scenario1');
            case 2
                database=fullfile(datadir,'scenario2');
            case 3
                database=fullfile(datadir,'scenario3');
            case 4
                database=fullfile(datadir,'scenario4');
            case 5
                database=fullfile(datadir,'scenario5');
        end;
    
        for i=1:length(seriesnames);
            gooddatanames{end+1} = fullfile(database,seriesnames{i});
        end
    end
    

    这会导致单个文件的完整路径的 1x40 数组。

    【讨论】:

      【解决方案2】:

      我同意 Pursuit 所写的内容,但我想补充一点,您的 for/switch 结构有点傻。如果您实际上必须枚举所有它们,就像您在实现它时使用“开关”一样,那么没有理由不完全取出 for/switch 循环而只留下命令。一种可能的替代方法是将整个不必要的“开关”替换为:

      database = fullfile(datadir, ['scenario', num2str(proj)]);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多