'Multiply' 个字符串单元格以形成 MxN 大小的组合字符串单元格数组

'Multiply' string cells to form an MxN size cell array of combined strings

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

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

我可以使用字符串 '-'':''--''-.' 设置线型 - 我想使用这些字符串通过它们在A.

我可以使用 'g''b''r'.

等字符串设置线条颜色

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

是否可以 'multiply' 两个单元格组成一个 string/cell 包含指定所有行类型所需的完整 string/cell?

如果我有

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

我有一个替代解决方案。使用 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);

这可以通过 ndgrid and strcat 轻松完成:

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