COMPGROUPS.NET | Search | Post Question | Groups | Stream | About | Register

### Removing zeros from rows of a matrix

• Follow

```Hi Everyone

I have a matrix of the following form:

P=

2     3     0     0     0     0     0
2     6     3     0     0     0     0
2     5     3     0     0     0     0
2     1     4     5     6     7     3

I want to remove the zeros in all the rows to get something like this:

2     3
2     6     3
2     5     3
2     1     4     5     6     7     3

I tried the following:

P(P == 0) = []

but i got the wrong output:

Columns 1 through 14

2     2     2     2     3     6     5     1     3     3     4
5     6     7

Column 15

3

The command removes zeros but, converts rows to columns. However i
need the output as mentioned above.

Any guidance/help in this regard is highly appreciated.

Best Regards
```
 0

```Virtualized <razzaqadil@gmail.com> wrote in message <afa3c58d-37e6-425c-b7cc-66ac5f2bb705@l8g2000yqh.googlegroups.com>...
>
> I want to remove the zeros in all the rows to get something like this:
>
>      2     3
>      2     6     3
>      2     5     3
>      2     1     4     5     6     7     3
>
================

This is a non-rectangular array of numbers, so you cannot call it a "matrix" in any strict sense, or contain it as a MATLAB matrix data type

If you're only interested in _displaying_ the matrix with the zeros removed, you can do something like in this example :

>> a = [10 11; 0 1]; regexprep( evalc('a'), '\W0[ ]*', '')

ans =

a =

10 11
1

```
 0

```On 29/11/10 9:58 AM, Virtualized wrote:

> I have a matrix of the following form:
>
> P=
>
>       2     3     0     0     0     0     0
>       2     6     3     0     0     0     0
>       2     5     3     0     0     0     0
>       2     1     4     5     6     7     3
>
> I want to remove the zeros in all the rows to get something like this:
>
>       2     3
>       2     6     3
>       2     5     3
>       2     1     4     5     6     7     3

You cannot do that with a numeric matrix. All rows in a numeric matrix
must be exactly the same size.

You can create a character array that would _look_ like what you wanted
(but would have a bunch of trailing spaces on lines.)
```
 0

```As stated above, you cannot contain a non rectangular data in a single matrix. So the trick is to use the string functions (sprintf and str2num) to convert back and forth the data.

Try this:

%%%%%%%%%
for r=1:size(P,1)
str2num(sprintf('%d',P(r,P(r,:)>0)))
end
%%%%%%%%%

Abbas
```
 0

```Hi
Matt, Walter and Abbas

Thank you very much

Best Regards
```
 0

```Hi

When i used the statement:

regexprep( evalc('P'), '\W0[ ]*', '')

Now i get the following result:

pathnew =

2     3    0    0
2     6     3    0    0
2     5     3    0    0
2     1     4     5     6     7     3

There are still a few zeros at the end of first 3 lines, while some of
the zeros previously present have been removed.

Can you please guide how to get the result as mentioned above.

Best Regards
```
 0

```On 10-11-29 11:12 AM, Virtualized wrote:

> When i used the statement:
>
> regexprep( evalc('P'), '\W0[ ]*', '')
>
> Now i get the following result:
>
> pathnew =
>
>       2     3    0    0
>       2     6     3    0    0
>       2     5     3    0    0
>       2     1     4     5     6     7     3
>
> There are still a few zeros at the end of first 3 lines, while some of
> the zeros previously present have been removed.
>
> Can you please guide how to get the result as mentioned above.

Change the pattern to '( +0\W)+\$'
```
 0

```Virtualized <razzaqadil@gmail.com> wrote in message <cfe4687d-3128-4698-afed-acdc57520580@a17g2000yql.googlegroups.com>...
>
> There are still a few zeros at the end of first 3 lines, while some of
> the zeros previously present have been removed.
>
> Can you please guide how to get the result as mentioned above.
===========

This seems to work better

>> regexprep( evalc('P'), '\D0', '  ')

ans =

P =

2     3
2     6     3
2     5     3
2     1     4     5     6     7     3
```
 0

```Another possibility:

>> P
P =
2     3     0     0     0     0     0
2     6     3     0     0     0     0
2     5     3     0     0     0     0
2     1     4     5     6     7     3

>> regexprep( evalc('P'), '\s0', ' ')
ans =
P =

2     3
2     6     3
2     5     3
2     1     4     5     6     7     3

Or, another:

S = sprintf([repmat('%i ',1,size(P,2)),'\n'],P.');
S = regexprep(S, '\s0', ' ')
S =

2 3
2 6 3
2 5 3
2 1 4 5 6 7 3
```
 0

```Hi Everyone

Thanks a lot.

Best Regards
```
 0

9 Replies
574 Views

Similiar Articles:

7/24/2012 2:04:05 AM