Home > Software design >  How to add rows to a matrix with pad?
How to add rows to a matrix with pad?

Time:01-29

I have a matrix like this:

profile=np.array([[0,0,0.5,0.1],
                  [0.3,0,0,0],
                  [0,0,0.1,0.9],
                  [0,0,0,0.1],
                  [0,0.5,0,0]])

And I want to add a row before and after filled with zeros. How can I do that? I thought of using np.pad but not sure how.

Output should be:

np.array([[0,0,0,0],
          [0,0,0.5,0.1],
          [0.3,0,0,0],
          [0,0,0.1,0.9],
          [0,0,0,0.1],
          [0,0.5,0,0]
          [0,0,0,0]])

CodePudding user response:

The np.pad function allows you to specify the axes you want to pad:

In [3]: np.pad(profile, ((1, 1), (0, 0)))
Out[3]:
array([[0. , 0. , 0. , 0. ],
       [0. , 0. , 0.5, 0.1],
       [0.3, 0. , 0. , 0. ],
       [0. , 0. , 0.1, 0.9],
       [0. , 0. , 0. , 0.1],
       [0. , 0.5, 0. , 0. ],
       [0. , 0. , 0. , 0. ]])

The nested tuple can be read as: pad 1 array "above", and 1 array "below" axis 0, and pad 0 arrays "above" and 0 arrays "below" axis 1.

Another example, which pads five columns "after" on axis 1:

In [4]: np.pad(profile, ((0, 0), (0, 5)))
Out[4]:
array([[0. , 0. , 0.5, 0.1, 0. , 0. , 0. , 0. , 0. ],
       [0.3, 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
       [0. , 0. , 0.1, 0.9, 0. , 0. , 0. , 0. , 0. ],
       [0. , 0. , 0. , 0.1, 0. , 0. , 0. , 0. , 0. ],
       [0. , 0.5, 0. , 0. , 0. , 0. , 0. , 0. , 0. ]])

CodePudding user response:

You can use np.pad:

out = np.pad(profile, 1)[:, 1:-1]

Output:

>>> out
array([[0. , 0. , 0. , 0. ],
       [0. , 0. , 0.5, 0.1],
       [0.3, 0. , 0. , 0. ],
       [0. , 0. , 0.1, 0.9],
       [0. , 0. , 0. , 0.1],
       [0. , 0.5, 0. , 0. ],
       [0. , 0. , 0. , 0. ]])

Because np.pad pads it on all sides (left and right, in addition to top and bottom), [:, 1:-1] slices off the first and last columns.

  •  Tags:  
  • Related