Python reshape list to ndim array

You can think of reshaping that the new shape is filled row by row (last dimension varies fastest) from the flattened original list/array.

If you want to fill an array by column instead, an easy solution is to shape the list into an array with reversed dimensions and then transpose it:

x = np.reshape(list_data, (100, 28)).T

Above snippet results in a 28x100 array, filled column-wise.

To illustrate, here are the two options of shaping a list into a 2x4 array:

np.reshape([0, 0, 1, 1, 2, 2, 3, 3], (4, 2)).T
# array([[0, 1, 2, 3],
#        [0, 1, 2, 3]])

np.reshape([0, 0, 1, 1, 2, 2, 3, 3], (2, 4))
# array([[0, 0, 1, 1],
#        [2, 2, 3, 3]])

You can specify the interpretation order of the axes using the order parameter:

np.reshape(arr, (2, -1), order='F')