Если это только первая цифра, нам нужно только проверить, соответствует ли первая цифра (то есть floor(A/1e4)
) от 0
до 9
, и соответствующим образом индексировать ...
% Add some zeros at the front to make indexing work with the unmatched ismember outputs
Az = [zero(; A]; Bz = [0; B];
% Find the indices for 0 to 9 within the first digits of A and B
[~,ia] = ismember( 0:9, floor( A/1e4 ) );
[~,ib] = ismember( 0:9, floor( B/1e4 ) );
% Assign to C and discard unmatched rows
C = [Az(ia+1), Bz(ib+1)];
C( all( C==0, 2 ), : ) = [];
Примечаниечто сохранение числовых значений с помощью операции floor
всегда должно быть предпочтительнее, чем переключение между числовыми и символьными данными с такими вещами, как num2str
...
Edit
Вы изменили объем вопроса, комментируя новые данные.Вот тот же метод, написанный для более общего характера, поэтому он обрабатывает A
и B
с большим количеством столбцов и идентификаторами различных величин
% Add some zeros at the front to make indexing work with the unmatched ismember outputs
Az = [zeros(1,size(A,2)); A]; Bz = [zeros(1,size(A,2)); B];
% Function for getting first digit
f = @(x) floor(x./(10.^floor(log10(x))));
% Find the indices for 0 to 9 within the first digits of A and B
[~,ia] = ismember( 0:9, f(A(:,1)) );
[~,ib] = ismember( 0:9, f(B(:,1)) );
% Assign to C and discard unmatched rows
C = [Az(ia+1,:), Bz(ib+1,:)];
C( all( C==0, 2 ), : ) = [];