Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

Find a Community

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

04-02-2014 07:58 AM

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

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

Posted in reply to oriti

04-02-2014 09:40 AM

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;

All Replies

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

Posted in reply to oriti

04-02-2014 08:38 AM

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;

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

Posted in reply to Rick_SAS

04-02-2014 08:57 AM

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

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

Posted in reply to oriti

04-02-2014 09:02 AM

Define

S = (C^=0);

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

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

Posted in reply to Rick_SAS

04-02-2014 09:32 AM

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

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

Posted in reply to oriti

04-02-2014 09:40 AM

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;

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

Posted in reply to Rick_SAS

04-02-2014 09:56 AM

Thank you Rick!!

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

Posted in reply to oriti

04-02-2014 09:57 AM

Please check this works for you:

x=(C^=0);

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