2015-02-27 2 views
0

так я использую этот пример кода,Ошибка при помощи strjoin

--- Define M 
M = [sprintf('%s\t%s\n', 'a', 'b') ... 
    sprintf('%s\t%s\n', '011', '10') ... 
    sprintf('%s\t%s\n', '001', '10') ... 
    sprintf('%s\t%s\n', '112', '4') ... 
    sprintf('%s\t%s\n', '015', '2') ... 
    sprintf('%s\t%s\n', '086', '1') ... 
    sprintf('%s\t%s\n', '117', '1') ... 
    sprintf('%s\t%s\n', '121', '2')] 

% --- Convert into cells 
tmp = textscan(M, '%s\t%s\n'); 
C1 = tmp{1};   % First column 
C2 = tmp{2};   % Second column 

% --- Group 

% Get unique values of the second column 
UV = unique(C2); 

% Prepare result columns 
R1 = {}; 
R2 = {}; 

% Group 
for i = 1:numel(UV) 

    b = ismember(C2, UV{i}); 
    R1{i,1} = strjoin(C1(b), ','); 
    R2{i,1} = strjoin(C2(b), ','); 

end 

% --- Convert the result to a string 
Res = ''; 
for i = 1:numel(R1) 
    Res = [Res sprintf('%s\t%s\n', R1{i}, R2{i})]; 
end 

но выдает ошибку: Ошибка при помощи strjoin (строка 52) Первый вход должен быть массив 1xN ячейки строк.

Я использую версию matlab R2014a, я не знаю, как исправить эту ошибку, мне действительно нужен этот код, пожалуйста, спасибо спасибо.

+0

является strjoin команда совместима в R2009b? – NIMISHAN

ответ

1

Я также получаю эту ошибку при запуске кода (R2013a). Поскольку C1 и C1 представляют собой массивы ячеек размером 8x1, вам действительно необходимо перенести их оба, чтобы избежать ошибки (и, таким образом, получить ячейки массивов размером 1x8 по запросу strjoin). Это немного глупо, что он не выполняет транспонирование сам по себе.

Добавьте эти 2 строки перед циклом обеспечения ошибку, и она работает нормально:

C1 = C1.'; 
C2 = C2.'; 

Полный код:

M = [sprintf('%s\t%s\n', 'a', 'b') ... 
    sprintf('%s\t%s\n', '011', '10') ... 
    sprintf('%s\t%s\n', '001', '10') ... 
    sprintf('%s\t%s\n', '112', '4') ... 
    sprintf('%s\t%s\n', '015', '2') ... 
    sprintf('%s\t%s\n', '086', '1') ... 
    sprintf('%s\t%s\n', '117', '1') ... 
    sprintf('%s\t%s\n', '121', '2')] 

% --- Convert into cells 
tmp = textscan(M, '%s\t%s\n'); 
C1 = tmp{1};   % First column 
C2 = tmp{2};   % Second column 

% --- Group 

% Get unique values of the second column 
UV = unique(C2); 

% Prepare result columns 
R1 = {}; 
R2 = {}; 

C1 = C1.'; 
C2 = C2.'; 

% Group 
for i = 1:numel(UV) 

    b = ismember(C2, UV{i}); 
    R1{i,1} = strjoin(C1(b), ','); 
    R2{i,1} = strjoin(C2(b), ','); 

end 

% --- Convert the result to a string 
Res = ''; 
for i = 1:numel(R1) 
    Res = [Res sprintf('%s\t%s\n', R1{i}, R2{i})]; 
end 

Это я

Res = 

086,117 1,1 
011,001 10,10 
015,121 2,2 
112 4 
a b 
+0

Спасибо Master! Так держать! – Raldenors

+0

hahaha, вы очень желанны! :) –

+0

Может ли команда strjoin использоваться в Matlab R2009b? – NIMISHAN

Смежные вопросы