Adding a column every nth column without replacing existing one

15 views (last 30 days)
Hey all,
I am looking for a solution to the problem I mentioned in the title.
FOr example, I have matrix A
A = [1 2 3 4; 5 6 7 8; 9 10 11 12];
I now want to add every 2nd (and later 3th) column a new column containing zeros.
The result should be like this:
result = [1 0 2 0 3 0 4 0; 5 0 6 0 7 0 8 0; 9 0 10 0 11 0 12 0];
I know how to create a new column containg only zeros
B = zeros(number_of_rows,1);
Previously, I used
C = [A(:,1:2) B A(:,2+1:end)];
But this only works for a specific column and not every nth column.
Thanks for your answers in advance!

Accepted Answer

Adam Danz
Adam Danz on 11 Dec 2019
Edited: Adam Danz on 11 Dec 2019
The variable n indicates every n-columns that should be 0s. It must be an integer greater than 1.
See inline comments for details.
% INPUTS
A = [1 2 3 4; 5 6 7 8; 9 10 11 12];
n = 2; % for n=2, every 2nd col will be 0s
% Determine the number of columns of resultant matrix
nCol = floor(size(A,2)/(n-1)*n);
% matrix of all 0s
result = zeros(size(A,1),nCol);
% Determine column indices of non-zeros
colIdx = 1:nCol;
colIdx(n:n:end) = [];
% Insert values from A into result matrix
result(:,colIdx) = A
  3 Comments
Enthusiasten
Enthusiasten on 12 Dec 2019
Thanks for your answer! I chose the non-function code because I wanted to implement it into an existing script with other things and realized, that in my version it is not possible to insert a function in a script.

Sign in to comment.

More Answers (2)

Max Murphy
Max Murphy on 11 Dec 2019
Test Data
A = [1 2 3 4; 5 6 7 8; 9 10 11 12];
Function
function A = addDataNthColumn(A,B,n)
% ADDDATANTHCOLUMN Add data in column vector or matrix B to every nth
% column of A
if nargin < 3
n = 3;
end
if size(A,1) ~= size(B,1)
error('A and B must have same number of rows');
end
if size(A,2) >= n
% Use recursion to iterate on A
A = [A(:,1:(n-1)), B, addDataNthColumn(A(:,n:end),B,n)];
else
A = [A, B]; % Last "set" just concatenate them
end
end
Usage
>> test = addDataNthColumn(A,zeros(3,2),2)
test =
1 0 0 2 0 0 3 0 0 4 0 0
5 0 0 6 0 0 7 0 0 8 0 0
9 0 0 10 0 0 11 0 0 12 0 0
  5 Comments
Adam Danz
Adam Danz on 11 Dec 2019
Well there must have been good thresholding on your instrumentation, then. It's such a good feeling to work with an isolatable single neuron but mult-iunit activity is also fun. Now you have me all nostalgic.

Sign in to comment.


Chuguang Pan
Chuguang Pan on 12 Dec 2019
It is every 2th column. Now I put it in Answer this question
rowA=size(A,1);
colA=size(A,2);
B=zeros(rowA,colA*2);
B(:,1:2:2*colA)=A;

Products


Release

R2015b

Community Treasure Hunt

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

Start Hunting!