我需要将一行中的每一列合并为一个数字
A = [8 1 6
3 5 7
4 9 2];
我的目标是拥有这种形式:
B = [816; 357; 492]
答案 0 :(得分:5)
有几种方法可以做到这一点。最快可能会考虑矩阵的每一行包含基数为10的数字,并将这些数字组合在一起,我们应该将第一列乘以10^2
(100
),将第二列乘以{{ 1}}(10^1
)和10
(10^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.