Adding a column every nth column without replacing existing one

12 vues (au cours des 30 derniers jours)
Enthusiasten
Enthusiasten le 11 Déc 2019
Commenté : Adam Danz le 12 Déc 2019
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!

Réponse acceptée

Adam Danz
Adam Danz le 11 Déc 2019
Modifié(e) : Adam Danz le 11 Déc 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 commentaires
Enthusiasten
Enthusiasten le 12 Déc 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.
Adam Danz
Adam Danz le 12 Déc 2019
Glad I could help out!

Connectez-vous pour commenter.

Plus de réponses (2)

Max Murphy
Max Murphy le 11 Déc 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 commentaires
Adam Danz
Adam Danz le 11 Déc 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.
Enthusiasten
Enthusiasten le 12 Déc 2019
Thanks for your answer!

Connectez-vous pour commenter.


Chuguang Pan
Chuguang Pan le 12 Déc 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;

Catégories

En savoir plus sur Get Started with MATLAB dans Help Center et File Exchange

Produits


Version

R2015b

Community Treasure Hunt

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

Start Hunting!

Translated by