2015-05-05 4 views
1

Это должно быть очень просто. У меня есть массив ячеек с двумя столбцами. Один - это числа, а другой - цвета. Я хочу объединить эти два столбца в один столбец, разделенный символами подчеркивания. Например, у меня есть что-то вроде этого:конкатенирующие ячейки в матрице с разделителем

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,:}]; 

Уверен, что у меня что-то отсутствует - Прошу прощения, если это что-то очевидно

ответ

2

Это векторное изображение:

desired = strcat(num2str([plant_tag{:,1}].'), '_', plant_tag(:,2)); 
2

Вы можете сделать это с помощью strcat (а также преобразования 3 двойников в строку):

>> strcat(cellfun(@(c)num2str(c),plant_tag(:,1)) , '_' , plant_tag(:,2)) 

ans = 
    '3_dark_blue' 
    '3_dark_blue' 
    '3_dark_blue' 
+0

хорошее использование 'cellfun'! +1 –

+0

Хорошая идея! Отлично подходит для примера, но со всеми моими данными я получаю сообщение об ошибке: «Ошибка использования cellfun Нескаляр в Uniform output, по индексу 37, вывод 1. Установите« UniformOutput »в false. ' Поэтому я попытался: strcat (cellfun (@ (c) num2str (c), plant_tag (:, 1)), '_', plant_tag (:, 2), 'UniformOutput', false), но я все равно получаю ту же ошибку – user2860703

+0

Эта ошибка возникнет, если элементы 'plant_tag (:, 1)' не все скалярны. Вы можете попытаться обойти проблему, переместив 'cellfun' на внешний вид:' cellfun (@ (c1, c2) strcat (num2str (c1), '_', c2), plant_tag (:, 1), plant_tag (: , 2), 'UniformOutput', ложь) ' – TroyHaskin

2

С хорошим старый цикл:

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' 
Смежные вопросы