How can I add n columns to a matrix?

43 visualizaciones (últimos 30 días)
Tom
Tom el 27 de Sept. de 2021
Editada: Stephen23 el 28 de Sept. de 2021
Dear experts,
I have a Matrix X(4082x2). Now I want to add for example two columns to the matrix with every cell = 0.
That´s how I´ve done it so far:
amount_rows = numel(X(:,1));
randomdata = rand(amount_rows,1);
added_column = 0*randomdata;
X = [X added_column added_column];
Until now, that worked completely fine but my problem is that I now have a dataset where I need to add more than 100 columns. It would be pretty annoying to add those 100 times the added_column into the bracket (I hope you know what I mean). On top of that, I want the script to work for every dataset so that it automatically adds the "added_collumn" e.g. n-times. Somehow like that:
X = [X (added_column)*n]
(in the case described above n =2)
I know that this is not correct but I hope you get the idea.
Thanks in advance.
Kind regards, TG

Respuesta aceptada

Stephen23
Stephen23 el 27 de Sept. de 2021
Editada: Stephen23 el 28 de Sept. de 2021
A simpler, more versatile, and much more efficient approach is to use ZEROS:
R = size(X,1);
C = number_of_new_columns;
X = [X,zeros(R,C)];
Another simple approach is to use indexing (which implicitly fills the other new elements with zeros):
X(1, end+C) = 0 % Thank you Image Analyst
  2 comentarios
Image Analyst
Image Analyst el 27 de Sept. de 2021
Editada: Image Analyst el 27 de Sept. de 2021
Or, more simply
X(end, end+C) = 0
Steven Lord
Steven Lord el 27 de Sept. de 2021
In the general case where you want to augment a matrix with copies of a vector (not necessarily the zero vector) you can use repmat.
A = magic(3)
A = 3×3
8 1 6 3 5 7 4 9 2
v = [42; -99; NaN]
v = 3×1
42 -99 NaN
B = [A, repmat(v, 1, 5)]
B = 3×8
8 1 6 42 42 42 42 42 3 5 7 -99 -99 -99 -99 -99 4 9 2 NaN NaN NaN NaN NaN
Or if you need to augment with a series of vectors that can be created by arithmetic operations you can use implicit expansion.
c = [1; 2; 3]
c = 3×1
1 2 3
d = 1:5
d = 1×5
1 2 3 4 5
E = [A, v, c+d] % c+d makes a 3-by-5 matrix
E = 3×9
8 1 6 42 2 3 4 5 6 3 5 7 -99 3 4 5 6 7 4 9 2 NaN 4 5 6 7 8

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Matrix Indexing en Help Center y File Exchange.

Productos


Versión

R2019b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by