【问题标题】:'Multiply' string cells to form an MxN size cell array of combined strings“乘”字符串单元以形成一个 MxN 大小的组合字符串单元数组
【发布时间】:2015-09-07 01:22:53
【问题描述】:

我正在绘制可变数量的行。

行数是其他两个数字的乘积,因此(例如)对于所有前缀 A 和所有后缀 B,我绘制 ['A(i)','B(j)'].

我可以使用字符串'-'':''--''-.' 来设置线型 - 我想使用这些字符串通过它们在A 中的索引来分隔线。

我可以使用'g','b','r'等字符串设置线条颜色。

使用switchfor 循环设置这些并不难。

是否可以将两个单元格“相乘”以形成一个字符串/单元格,其中包含指定所有线型所需的完整字符串/单元格?

如果我有

lineType = {'-',':','--','-.'};
lineColor = {'g','b','r'};

我怎样才能得到

lineString = {'g-','g:','g--','g-.',...
              'b-','b:','b--','b-.',...
              'r-','r:','r--','r-.'};

简单的解决方案(如果有内置的或更好的解决方案,请告诉我)

lineString = cell(sizeA*sizeB, 1);
idx = 1;
for i = 1:sizeA
    for j = 1:sizeB
         lineString{idx} = [A{i},B{j}];
         idx = idx + 1;
    end
end

【问题讨论】:

    标签: string matlab plot colors cell-array


    【解决方案1】:

    这可以通过ndgridstrcat 轻松完成:

    [cc, tt] = ndgrid(1:numel(lineColor), 1:numel(lineType));
    lineString = strcat(lineColor(cc), lineType(tt));
    

    【讨论】:

      【解决方案2】:

      我有一个替代解决方案。使用repmat 消除对for 循环的需要,并使用cellfun 执行字符串的连接。您需要将cellfun 中的UniformOutput 设置为false,因为输出既不是标量元胞数组、标量结构也不是标量值。

      lineType_ = repmat(lineType, size(lineColor,2), 1);
      lineColor_ = repmat(lineColor', 1, size(lineType,2));
      lineString = cellfun(@horzcat, lineColor_, lineType_, 'UniformOutput', 0);
      

      【讨论】:

      • 您可以使用cellfun(@horzcat,保存一步。
      • 感谢您的评论!我已经相应地编辑了我的答案。
      猜你喜欢
      • 2017-01-11
      • 1970-01-01
      • 2017-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-14
      • 2018-04-14
      • 1970-01-01
      相关资源
      最近更新 更多