pythonnumpyreshape

Python reshape list to ndim array


Hi I have a list flat which is length 2800, it contains 100 results for each of 28 variables: Below is an example of 4 results for 2 variables

[0,
 0,
 1,
 1,
 2,
 2,
 3,
 3]

I would like to reshape the list to an array (2,4) so that the results for each variable are in a single element.

[[0,1,2,3],
 [0,1,2,3]]

Solution

  • 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]])