'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'
.
等字符串设置线条颜色
使用 switch
或 for
循环设置这些并不难。
是否可以 '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);
[cc, tt] = ndgrid(1:numel(lineColor), 1:numel(lineType));
lineString = strcat(lineColor(cc), lineType(tt));
我正在绘制可变数量的线。
行数是另外两个数字的乘积,因此(例如)对于所有前缀 A
和所有后缀 B
,我绘制
['A(i)','B(j)']
.
我可以使用字符串 '-'
、':'
、'--'
、'-.'
设置线型 - 我想使用这些字符串通过它们在A
.
我可以使用 'g'
、'b'
、'r'
.
使用 switch
或 for
循环设置这些并不难。
是否可以 '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);
[cc, tt] = ndgrid(1:numel(lineColor), 1:numel(lineType));
lineString = strcat(lineColor(cc), lineType(tt));