简体   繁体   中英

How to insert rows and columns of zeros into Matlab Matrix

I have a 3x3 matrix, k1, that I would like to convert into a 5x5 matrix, k1g. k1g is created by inserting zeros into certain rows and columns of k1. In this case I would like to insert zeros into rows 3 and 4 and columns 3 and 4, and keep existing values from k1 matrix. The code below accomplishes what I am trying to do but seems that it is a long method and I need to do this many times in numerous problems.

clc
clear all
format long;
k1 = [20,50,-20;
     60,20,-20;
   -20,-20,40]
k1g = zeros(5,5);
k1g(1:2,1:2) = k1(1:2,1:2);
k1g(5:5,1:2) = k1(3:3,1:2);
k1g(1:2,5:5) = k1(1:2,3:3);
k1g(5,5) = k1(3,3)

Here is output of above code:

k1 =

    20    50   -20
    60    20   -20
   -20   -20    40


k1g =

    20    50     0     0   -20
    60    20     0     0   -20
     0     0     0     0     0
     0     0     0     0     0
   -20   -20     0     0    40

Is there a better way to accomplish this?

You just need to generalise your approach. eg with:

function k1g = rowcolsof0s(k1,rowsof0s,colsof0s)
k1g = ones(size(k1)+[numel(rowsof0s) numel(colsof0s)]);  %Initialising matrix with ones
k1g(rowsof0s,:) = 0;    %Changing the elements of desired rows to zeros
k1g(:,colsof0s) = 0;    %Changing the elements of desired columns to zeros
k1g(logical(k1g)) = k1; %Transferring the contents of k1 into k1g
end

Now call that function with:

rowsof0s = [3 4];       %rows where you want to insert zeros
colsof0s = [3 4];       %columns where you want to insert zeros

k1g = rowcolsof0s(k1, rowsof0s, colsof0s);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM