meshgrid等价于字符串

时间:2014-04-02 18:16:09

标签: string matlab concatenation string-concatenation cell-array

我有两个单元格:

Months1 = {'F','G','H','J','K','M','N','Q','U','V','X','Z'};
Months2 = 2009:2014;

如何在不运行循环的情况下生成所有组合,以便实现以下目的:

Combined = {'F09','F10','F11','',...,'G09',.....};

基本上Months1Months2的所有组合都在meshgrid中。

3 个答案:

答案 0 :(得分:3)

如果您不需要单元格并且只能使用char数组,则可以使用:

Months1 = ['F','G','H','J','K','M','N','Q','U','V','X','Z']';
Months2 = num2str((2009:2014)');

[x, y] = meshgrid(1:12, 1:6);
Combined = strcat(Months1(x(:)), Months2(y(:),:));

然后,如果需要,您可以reshape。不过,我还不确定如何用细胞做到这一点。 灵感来自this帖子。

答案 1 :(得分:3)

我对这个问题的看法将适用ndgriddatestr(处理任何一千年)和strcat来完成这项工作:

yearStrings = datestr(datenum(num2str(Months2(:)),'yyyy'),'yy');
[ii,jj] = ndgrid(1:numel(Months2),1:numel(Months1));
Combined = strcat(Months1(jj(:)).',yearStrings(ii(:),:)).'

注意:年份的变化速度比带前缀字母的速度要快,因此Months2先于ndgrid,然后是Months1。 IMO,this is more intuitive behavior than meshgrid,迫使你在x,y空间思考,以预测输出的变化。


或者代替strcat行:

tmp = [Months1(jj(:)).',yearStrings(ii(:),:)].';
Combined = cellstr(reshape([tmp{:}],[],numel(ii)).').'

答案 2 :(得分:2)

您可以将单元格数组转换为grp2idx的索引,然后使用meshgrid,然后使用strcat来组合字符串。在您还需要将数字Months2向量转换为字符串的单元格数组之前。

[id1,id2] = meshgrid(grp2idx(Months1),Months2);
Months2cell = cellstr(num2str(id2(:)-2000,'%02d'))';
Combined = strcat( Months1(id1(:)), Months2cell );