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! 😉