Filter löschen
Filter löschen

Adding a column every nth column without replacing existing one

9 Ansichten (letzte 30 Tage)
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!

Akzeptierte Antwort

Adam Danz
Adam Danz am 11 Dez. 2019
Bearbeitet: Adam Danz am 11 Dez. 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 Kommentare
Enthusiasten
Enthusiasten am 12 Dez. 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.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Max Murphy
Max Murphy am 11 Dez. 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 Kommentare
Adam Danz
Adam Danz am 11 Dez. 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.

Melden Sie sich an, um zu kommentieren.


Chuguang Pan
Chuguang Pan am 12 Dez. 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;

Kategorien

Mehr zu Get Started with MATLAB finden Sie in Help Center und File Exchange

Produkte


Version

R2015b

Community Treasure Hunt

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

Start Hunting!

Translated by