How can I insert many columns into a matrix at different locations efficiently?

2 views (last 30 days)
I have a matrix in which I need to delete several columns of zeros, perform some operation (i.e. matrix inverse), and then re-insert the zero columns back into the matrix at the same position. My matrix is very large, so I don't want to store a duplicate of the matrix in memory. For example:
%Create some "data"
A = rand(100); %some random data
A(:,randsample(100,15))=zeros(100,15); %some random columns of zeros
%Now that we have "data", let's find the zero columns:
col = find(~all(A));
%Delete the zero columns
A(:,col) = [];
%Now do some stuff to A ....
%Now I want to re-add the columns in????
One simple option to solve the problem is:
for i = 1:length(col)
A = [A(:,1:col(i)-1) zeros(100,1) A(:,col(i):end)];
But I feel like there must be a more elegant way to do it without the for loop that can essentially "reverse" the deletion. Any help is appreciated.

Sign in to comment.

Answers (1)

Chunru on 27 Sep 2022
Edited: Chunru on 27 Sep 2022
%Create some "data"
A = rand(100); %some random data
col = randsample(100,15);
A(:, col)=zeros(100,15); %some random columns of zeros
%Now that we have "data", let's find the zero columns:
col = find(all(A==0))
col = 1×15
1 2 4 5 7 20 33 35 41 49 67 69 70 86 92
% No need to delete the zero columns
% Just re-assign anything back to A
% This is a faster approach since array size is kept the same.
% For example
A(:, col) = ones(size(A,1), length(col));
Chunru on 28 Sep 2022
You can refenrence to the sub array. But we dont know what you exactly want to do.

Sign in to comment.


Find more on Shifting and Sorting Matrices in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!