array: concatenate two columns of integers to one colum
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
(Matlab novice)
I thought this would be so easy...
I have a 2-d array of integers and I want to combine two columns like this:
... 123 456 ...
... 123 456 ...
etc...
I want:
... 123456 ...
... 123456 ...
etc...
as single numbers (that is, I want (123 * 1000) + (456)
The number of rows will be variable from one run to the next.
Any help would be appreciated.
1 comentario
Jan
el 13 de Sept. de 2012
The question is not clear. What is the wanted output for: [1,2,3,4; 5,6,7,8; 9,10,11,12] ?
Respuesta aceptada
Honglei Chen
el 13 de Sept. de 2012
Editada: Honglei Chen
el 13 de Sept. de 2012
a = randi([1 100],[5 4]) % a 5x4 integer matrix
b = cellfun(@num2str,{a(:,2:3)},'UniformOutput',false)
c = cellfun(@(x) strrep(x,' ',''), cellstr(b{1}),'UniformOutput',false)
a(:,2) = str2double(c)
a(:,3) = []
2 comentarios
Honglei Chen
el 13 de Sept. de 2012
@Jan, thanks for the tip. That's a good one. I think you missed a b in your second expression.
Más respuestas (4)
Jan
el 13 de Sept. de 2012
Editada: Jan
el 13 de Sept. de 2012
A = [1234, 567; 1, 234];
B = A(:, 1) .* nextpow10(A(:, 2)) + A(:, 2);
function Y = nextpow10(X)
Y = 10 .^ floor(log10(abs(n)) + 1); % [EDITED]
Please test this before using, I cannot run Matlab currently.
1 comentario
Andrei Bobrov
el 13 de Sept. de 2012
Editada: Andrei Bobrov
el 13 de Sept. de 2012
A=randi(67,6,4)
n = ceil(log10(A(:,2:end)));
out = sum(A(:,1:end-1).*(10.^fliplr(cumsum(fliplr(n),2))),2)+ A(:,end)
William Sampson
el 13 de Sept. de 2012
2 comentarios
Honglei Chen
el 13 de Sept. de 2012
It's the same. I updated my answer to show an example of combining 2nd and 3rd column of a matrix
Jan
el 13 de Sept. de 2012
Editada: Jan
el 13 de Sept. de 2012
See my suggestion:
B = rawData(:, 9) .* nextpow10(rawData(:, 10)) + rawData(:, 10)
result = [rawData(:, 1:8), B, rawData(:, 11:end)]
I do not see, why the suggested method should not work.
Btw. What do you expect as result of two 16 digit numbers? You can store only 16 digits in variables of the type DOUBLE.
Ryan
el 13 de Sept. de 2012
Editada: Ryan
el 13 de Sept. de 2012
A = [1234, 567; 1, 234]; %Sample Data
% Figure out how many spaces to shift the left column
C = ceil(log10(A(:,2)));
% Find areas where the value is a multiple of 10 or is 1
idx = A(:,2) == 1 | rem(A(:,2),10) == 0;
C(idx) = C(idx) + 1; % Handle the exception
% Determine how much to shift the left column
C = 10.^C;
% Add in the right column
A = A(:,1).*C + A(:,2);
0 comentarios
Ver también
Categorías
Más información sobre Matrices and Arrays en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!