这应该很简单。我有一个有两列的单元格数组。一个是数字,另一个是颜色。我想将这两列连接成一个由下划线分隔的列。例如,我有这样的事情:
plant_tag = {3,'dark_blue';3,'dark_blue';3,'dark_blue'}
我想要这样的事情:
desired = {'3_dark_blue'; '3_dark_blue'; '3_dark_blue'}
我看过这里和其他地方 How can I concatenate strings in a cell array with spaces between them in MATLAB?
这是我到目前为止所尝试的内容
% Gives me errors
test2 = strjoin(plant_tag,'_');
test3 = strjoin(plant_tag(1,:),'_');
test4 = strjoin(cellstr(plant_tag(1,:)),'_');
test5 = strjoin(cellstr(plant_tag{1,:}),'_');
% No error, but misses number
test6 = [plant_tag{1,1} plant_tag{1,2}];
test7 = [plant_tag{1,:}];
我确定我在这里遗漏了一些东西 - 如果它是显而易见的话我道歉
答案 0 :(得分:3)
这是一个矢量化解决方案:
desired = strcat(num2str([plant_tag{:,1}].'), '_', plant_tag(:,2));
答案 1 :(得分:2)
您可以使用strcat
完成此操作(并将3
双打转换为字符串):
>> strcat( cellfun(@(c)num2str(c),plant_tag(:,1)) , '_' , plant_tag(:,2))
ans =
'3_dark_blue'
'3_dark_blue'
'3_dark_blue'
答案 2 :(得分:2)
有一个很好的for循环:
clear
clc
plant_tag = {3,'dark_blue';2,'dark_red';1,'dark_green'}
desired = cell(size(plant_tag,1),1);
for k = 1:size(plant_tag,1)
desired{k} = strcat(num2str(plant_tag{k,1}),'_',plant_tag{k,2});
end
desired
输出:
desired =
'3_dark_blue'
'2_dark_red'
'1_dark_green'