Dsto4
Dsto4

Reputation: 123

numpy roll along a single axis

I have a numpy array with binary values that I need to change in the following way: The value of every element must be shifted one column to the left but only within the same row. As an example, I have the following array:

>>> arr = np.array([[0,0,1,0],[1,0,0,0],[0,0,1,1]])
>>> arr
array([[0, 0, 1, 0],
       [1, 0, 0, 0],
       [0, 0, 1, 1]])

And it needs to be transformed to:

>>> arr
array([[0, 1, 0, 0],
       [0, 0, 0, 1],
       [0, 1, 1, 0]])

I know that np.roll(arr,-1) would roll the values one cell to the left, but it doesn't seem to be able to roll them within the rows they belong to (i.e. the element on cell [1,0] goes to [0,3] instead of the desired [1,3]. Is there a way of doing this?

Thanks in advance.

Upvotes: 1

Views: 422

Answers (1)

cs95
cs95

Reputation: 402313

roll accepts an axis parameter:

np.roll(arr,-1, axis=1)

array([[0, 1, 0, 0],
       [0, 0, 0, 1],
       [0, 1, 1, 0]])

Upvotes: 7

Related Questions