Python – What is the idea of “-1” in numpy reshape?

Today I was “fighting” with the numpy reshape function and I found something strange like matrix.reshape(1, -1). Thus, I have researched quite some time and I found, that the -1 is actually a placeholder for python to change the dimensions of the array, given the other dimensions.

E.g., if you declare the following matrix:

matrix = np.matrix([
                        [1,2,3],
                        [6,7,8],
                        [10,11,12],
                        [100,200,300],
                    ])

Then, you may kindly ask python to change its dimensions to “6” in rows and whatever is left as a column. “Whatever is left” in our case is 2, and this “whatever” is presented as -1. Thus the following code:

import numpy as np

matrix = np.matrix([
                        [1,2,3],
                        [6,7,8],
                        [10,11,12],
                        [100,200,300],
                    ])
                    
print("original:")
print(matrix)

reshaped = matrix.reshape(6, -1)
print("\n\nmatrix.reshape(6, -1)")
print(reshaped)

kindly presents:

original:
[[  1   2   3]       
 [  6   7   8]       
 [ 10  11  12]       
 [100 200 300]]      


matrix.reshape(6, -1)
[[  1   2]
 [  3   6]
 [  7   8]
 [ 10  11]
 [ 12 100]
 [200 300]]

If you want to try the rest of the reshape() function, then I will not take the fun away from you, by telling you the results:

import numpy as np

matrix = np.matrix([
                        [1,2,3],
                        [6,7,8],
                        [10,11,12],
                        [100,200,300],
                    ])
                    
print("original:")
print(matrix)

reshaped = matrix.reshape(6, -1)
print("\n\nmatrix.reshape(6, -1)")
print(reshaped)

reshaped = matrix.reshape(1, -1)
print("\n\nmatrix.reshape(1, -1)")
print (reshaped)

reshaped = matrix.reshape(-1, 1)
print("\n\nmatrix.reshape(-1, 1)")
print (reshaped)

reshaped = matrix.reshape(-1, 6)
print("\n\nmatrix.reshape(-1, 1)")
print(reshaped)

reshaped = matrix.reshape(2, -1)
print("\n\nmatrix.reshape(2, -1)")
print (reshaped)

#Here we do not even use -1!
reshaped = matrix.reshape(6, 2)
print("\n\nmatrix.reshape(6, 2)")
print (reshaped)

reshaped = matrix.reshape(-1, 4)
print("\n\nmatrix.reshape(-1, 4)")
print (reshaped)

Use it wisely! 😉