Adding a column every nth column without replacing existing one
    8 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Enthusiasten
 el 11 de Dic. de 2019
  
    
    
    
    
    Comentada: Adam Danz
    
      
 el 12 de Dic. de 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!
0 comentarios
Respuesta aceptada
  Adam Danz
    
      
 el 11 de Dic. de 2019
        
      Editada: Adam Danz
    
      
 el 11 de Dic. de 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 comentarios
Más respuestas (2)
  Max Murphy
      
 el 11 de Dic. de 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 comentarios
  Adam Danz
    
      
 el 11 de Dic. de 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.  
  Chuguang Pan
      
 el 12 de Dic. de 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;
Ver también
Categorías
				Más información sobre Matrix Indexing en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


