2015-09-07 47 views
2

我绘制了可变数量的行。'相乘'字符串单元格组成一个组合字符串的MxN大小单元格阵列

线的数量是另两个数的乘积,以便(例如)对于所有的前缀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 

回答

2

这可以用ndgridstrcat轻松完成!

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

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

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

您可以用'cellfun(@ horzcat,'以保存注释一步 – thewaywewalk

+0

谢谢,我已经编辑我的答案因此。 – user3667217

相关问题