Physicist
Physicist

Reputation: 3048

changing shapes of a numpy array

How to change the shape of array from ixMxNx3 to (M*N)xix3?

I have a ixMxNx3 array L. You can think of L as an array containing i images, each image has height=M, width=N, and in each pixel it has a three-dimensional vector (or rgb). Let P = M*N. I can change its shape to ixPx3 by L.reshape(i,P,3). (I hope it is really changing it to the shape I want). How do I change its shape to Pxix3? i.e. an array that contains P points, each point has i images, each image of that point has a three-dimensional vector.

How can this change of shape be accomplished?

Upvotes: 0

Views: 79

Answers (1)

user2357112
user2357112

Reputation: 280390

numpy.rollaxis can shift the position of an axis in a NumPy array:

L = L.reshape([i, P, 3])
L = numpy.rollaxis(L, 1)

It takes 3 arguments, one optional. The first is the array, the second is the axis to move, and the third is confusingly documented as "The axis is rolled until it lies before this position". Basically, if you want to move the ith axis to the jth position and j<i, the third argument should be j. If j>i, the third argument should be j+1. I don't know why it works that way. The third argument defaults to 0.

Upvotes: 1

Related Questions