2016-07-15 5 views

ответ

0

@Suever: Я не понимаю, почему вы удалили дискуссию, я новичок в этой группе; В любом случае, я поставил все тесты, которые я сделал, и результат:

`function testtttt() 

%%%% Solution1 stackoverflow %%%% 
    %A=importdata('file.mat'); 
    %B= (A * flip(10.^(0:size(A, 2)-1))') 

    %Result: B = 

    % 2.1194e+17 
    % 2.4989e+17 
    % 3.5458e+16 
    % 2.3669e+17 
    % 1.7582e+17 

%%%%%%%%% Solution2 Matlab Forum %%%%%%%%%%% 
% A=importdata('file.mat'); 
% B= num2str (A * flip(10.^(0:size(A, 2)-1))') 

%Result: B = 
    % 211935227421357568 
    % 249886223928308032 
    % 35457727150655748 
    % 236691335688358080 
    % 175820284169194336 

%%%%%%%%% Solution3 Matlab Forum %%%%%%%%%%% 

% A=importdata('file.mat'); 
% B= dec2hex(str2num(strcat(num2str(A)')')) 

%Result: B = 
     % D0 
     % E7 
     % 20 
     % E9 
     % A1 
     % 18 
     % 47 
     % 8C 
     % F5 
     % F7 
     % 28 
     % F8 

      ..... 

%%%%%%%%% Solution4 Matlab Forum %%%%%%%%%%% 

A = importdata('file.mat'); % file.mat contains my matrix 
[l c ] = size (A) ; 
    %B = cell (l,1); 
    for i =1 : l 
     B{i} = A(i, [1:16]) %however b{i} = a(i, :) 
    end 


%Result: B = 
    { 
    [1,1] = 

     208 15 217 252 128 35 50 252 209 120 97 140 235 220 32 251 

    [1,2] = 

     231 174 143 43 125 66 49 143 48 139 81 103 154 229 93 229 

    [1,3] = 

     32 10 237 65 224 22 83 238 31 15 252 27 179 48 173 221 

    [1,4] = 

     233 18 178 101 90 109 225 184 210 168 183 185 190 169 96 205 

    [1,5] = 

     161 133 149 18 115 65 120 123 163 227 105 157 98 240 221 142 
    ........ 

endfunction `          



                             the best solution is the third that i found in matlab forum. Then the result found in solution 2 are caused by the using of octave. Thank you for your help. 
+0

Лучшее решение - третье. @Suever большое спасибо за помощь ур. –

5

Есть несколько способы, которыми вы можете это сделать. Самый быстрый, вероятно, будет считать, что каждая строка вашей матрицы содержит цифры в базе-10 и объединять эти цифры вместе, мы должны умножить первую колонку на 10^2 (100), вторая колонка на 10^1 (10), а третья колонка - на 10^0 (1), а затем суммируйте каждую строку.

Мы можем легко выполнить это с помощью этого однострочного слоя, который создает все степени 10, а затем выполняет умножение матрицы с A для выполнения умножения и суммирования.

A = [8 1 6; 3 5 7; 4 9 2]; 

B = A * flip(10.^(0:size(A, 2)-1))'; 

% 816 
% 357 
% 492 

Еще медленнее, но возможное решение было бы преобразовать строки в строку, а затем преобразовать строку обратно в число.

B = str2double(reshape(sprintf('%d', A), size(A, 2), [])); 
+1

Также 'B = str2num (обугленного (A + '0'));' –

+0

@Suever: Я не понимаю, почему вы удалили в любом случае, я поставил все те тесты, которые я сделал, и результат: –

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