# How can I add n columns to a matrix?

27 ビュー (過去 30 日間)
Tom 2021 年 9 月 27 日

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);
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:
(in the case described above n =2)
I know that this is not correct but I hope you get the idea.
Kind regards, TG

サインインしてコメントする。

### 採用された回答

Stephen 2021 年 9 月 27 日

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 件のコメント表示非表示 1 件の古いコメント
Steven Lord 2021 年 9 月 27 日
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

サインインしてコメントする。

R2019b

### Community Treasure Hunt

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

Start Hunting!