フィルターのクリア

Adding a column every nth column without replacing existing one

10 ビュー (過去 30 日間)
Enthusiasten
Enthusiasten 2019 年 12 月 11 日
コメント済み: Adam Danz 2019 年 12 月 12 日
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!

採用された回答

Adam Danz
Adam Danz 2019 年 12 月 11 日
編集済み: Adam Danz 2019 年 12 月 11 日
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 件のコメント
Enthusiasten
Enthusiasten 2019 年 12 月 12 日
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 2019 年 12 月 12 日
Glad I could help out!

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

その他の回答 (2 件)

Max Murphy
Max Murphy 2019 年 12 月 11 日
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 件のコメント
Adam Danz
Adam Danz 2019 年 12 月 11 日
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 2019 年 12 月 12 日
Thanks for your answer!

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


Chuguang Pan
Chuguang Pan 2019 年 12 月 12 日
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;

カテゴリ

Help Center および File ExchangeGet Started with MATLAB についてさらに検索

製品


リリース

R2015b

Community Treasure Hunt

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

Start Hunting!

Translated by