Statistical programming, matrix languages, and more

Delete "zero columns"

Accepted Solution Solved
Reply
Contributor
Posts: 39
Accepted Solution

Delete "zero columns"

Dear all,

I would like to find an efficient way do delete zero column.

(part of my simulation results are matrix with zero columns

so I can't invert the matrix and it ends with empty value).

for example:

C={1 1 0 0 0,

     1 0 0 1 0,

     1 0 0 1 0}

I want to get:

D={1 1 0,

     1 0 1,

     1 0 1}

Thank you,

Orit


Accepted Solutions
Solution
‎04-02-2014 09:40 AM
SAS Super FREQ
Posts: 3,630

Re: Delete "zero columns"

You must have misunderstood my suggestion. You use S to find and extract the rows of the original matrix:

S = (C^=0);

cols = loc(S[+, ]>0);

if ncol(cols)>0 then

   D = C[,cols];

else

   D = C;

View solution in original post


All Replies
SAS Super FREQ
Posts: 3,630

Re: Delete "zero columns"

Are your matrix elements always binary 0/1?  If so, just sum down the columns and keep the colums that sum to any positive value:

cols = loc(C[+, ]>0);

if ncol(cols)>0 then

   D = C[,cols];

else

   D = C;

Contributor
Posts: 39

Re: Delete "zero columns"

Thank you Rick!

But No, my matrix contains positive and negative number in their columns.

Like

C={5 6 0 0 0,

    -5 0 0 -8 0,

     0 0 0 7 0}

How do you recommend do solve that ?

Thanks,

Orit

SAS Super FREQ
Posts: 3,630

Re: Delete "zero columns"

Define

S = (C^=0);

S is a binary 0/1 matrix, so use the previous code I sent.

Contributor
Posts: 39

Re: Delete "zero columns"

That is elegant,thanks!

The only problem is, that you end this code with the binary matrix.

I need the original matrix because I use it for other computations.(for ols coefficients)

How do you recommend to do that?

Thanks,

Orit

Solution
‎04-02-2014 09:40 AM
SAS Super FREQ
Posts: 3,630

Re: Delete "zero columns"

You must have misunderstood my suggestion. You use S to find and extract the rows of the original matrix:

S = (C^=0);

cols = loc(S[+, ]>0);

if ncol(cols)>0 then

   D = C[,cols];

else

   D = C;

Contributor
Posts: 39

Re: Delete "zero columns"

Thank you Rick!!

gin
N/A
Posts: 1

Re: Delete "zero columns"

Please check this works for you:

x=(C^=0);

Cnew=C[,loc(x[+,]^=0)];

🔒 This topic is solved and locked.

Need further help from the community? Please ask a new question.

Discussion stats
  • 7 replies
  • 874 views
  • 6 likes
  • 3 in conversation