将列组合成每行一个数字

时间:2016-07-15 12:08:20

标签: matlab

我需要将一行中的每一列合并为一个数字

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

我的目标是拥有这种形式:

B = [816; 357; 492] 

2 个答案:

答案 0 :(得分:5)

有几种方法可以做到这一点。最快可能会考虑矩阵的每一行包含基数为10的数字,并将这些数字组合在一起,我们应该将第一列乘以10^2100),将第二列乘以{{ 1}}(10^1)和1010^0)后的第三列,然后在每行之间求和。

我们可以很容易地用这个构成10的所有幂的单线程来实现这一点,然后用1执行矩阵乘法来执行乘法和求和。

A

另一个较慢但可能的解决方案是将您的行转换为字符串,然后将字符串转换回数字。

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

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

% 816
% 357
% 492

答案 1 :(得分: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.