简体   繁体   中英

How to reshape this numpy array to exclude the “extra dimension”?

I have a numpy array arr1 which it an output of a function. The array has an "extra" dimension caused by each element inside the numpy array being cast as a numpy array itself.

arr1.shape outputs (100, 20, 1)

If I print the array, print(arr1[0]) outputs

array([[-212537.61715316],
       [   7258.38476409],
       [  37051.91250884],
       [-146278.00512207],
       [-185792.24620168],
       [-200794.59538468],
       [-195981.27879612],
       [-177912.26034464],
       [-152212.805867  ],
       [-118873.26452198],
       [ -64657.64682999],
       [ 306884.11196766],
       [-191073.9891907 ],
       [-104992.44840277],
       [ -67834.43041102],
       [ -21810.77063542],
       [  17307.24511071],
       [  55607.49775471],
       [  91259.82533592],
       [ 119207.40589797]])

If I reshape with arr1.reshape((100,20)) , I get the following output for print(arr1.reshape((100,20))[0]) :

array([-212537.61715316,    7258.38476409,   37051.91250884,
       -146278.00512207, -185792.24620168, -200794.59538468,
       -195981.27879612, -177912.26034464, -152212.805867  ,
       -118873.26452198,  -64657.64682999,  306884.11196766,
       -191073.9891907 , -104992.44840277,  -67834.43041102,
        -21810.77063542,   17307.24511071,   55607.49775471,
         91259.82533592,  119207.40589797])

My question is: how do I exclude this "extra" one, but retain the original shape of the array arr1 ?

Is the best method to use .reshape() ? If not, what is the best way to do this?

You might be looking for numpy.squeeze :

http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.squeeze.html

a = np.arange(10*20).reshape((10, 20, 1))
print(a.shape)
# (10, 20, 1)
a = a.squeeze()
print(a.shape)
# (10, 20)

Note the other answer since your reshape should have worked you were just looking at the output incorrectly.

You are using reshape correctly.

 arr2 = arr1.reshape((100,20))

The shape of this will be (100,20), the same as arr1 without the last dimension.

arr1[0] has shape (20,1), and thus prints as a column.

arr2[0] has shape (20,), and thus prints as a row(s) (count the brackets). You might not like the display, but the shape is correct.

squeeze can also be used to take out the extra dimension, but the results will be same.

print(arr2[0][:,None]) should print as a column. It effectively adds that extra dimension back on prior to printing.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM