Skip to content Skip to sidebar Skip to footer

Python Flatten An Array Of Array

I have an array of array, something like that: array([[array([33120, 28985, 9327, 45918, 30035, 17794, 40141, 1819, 43668], dtype=int64)], [array([33754, 24838, 1770

Solution 1:

Use a list comprehension, then convert back to array:

>>> arr = array([[array([33120, 28985,  9327, 45918, 30035, 17794, 40141,  1819, 43668],
      dtype='int64')],
       [array([33754, 24838, 17704, 21903, 17668, 46667, 17461, 32665],
      dtype='int64')],
       [array([46842, 26434, 39758, 27761, 10054, 21351, 22598, 34862, 40285,
       17616, 25146, 32645, 41276], dtype='int64')],
       [array([24534,  8230, 14267,  9352,  3543, 29397,   900, 32398, 34262,
       37646, 11930, 37173], dtype='int64')],
       [array([25157], dtype='int64')],
       [array([ 8859, 20850, 19322,  8075], dtype='int64')]], dtype=object)
>>> array([x for i in arr.tolist() for x in i[0].tolist()])
array([33120, 28985,  9327, 45918, 30035, 17794, 40141,  1819, 43668,
       33754, 24838, 17704, 21903, 17668, 46667, 17461, 32665, 46842,
       26434, 39758, 27761, 10054, 21351, 22598, 34862, 40285, 17616,
       25146, 32645, 41276, 24534,  8230, 14267,  9352,  3543, 29397,
         900, 32398, 34262, 37646, 11930, 37173, 25157,  8859, 20850,
       19322,  8075])
>>> 

Solution 2:

In [141]: array=np.array; 
     ...: arr = array([[array([33120, 28985,  9327, 45918, 30035, 17794, 40141,  1819, 43668], 
     ...:       dtype='int64')], 
     ...:        [array([33754, 24838, 17704, 21903, 17668, 46667, 17461, 32665], 
     ...:       dtype='int64')], 
     ...:        [array([46842, 26434, 39758, 27761, 10054, 21351, 22598, 34862, 40285, 
     ...:        17616, 25146, 32645, 41276], dtype='int64')], 
     ...:        [array([24534,  8230, 14267,  9352,  3543, 29397,   900, 32398, 34262, 
     ...:        37646, 11930, 37173], dtype='int64')], 
     ...:        [array([25157], dtype='int64')], 
     ...:        [array([ 8859, 20850, 19322,  8075], dtype='int64')]], dtype=object)                           
In [142]: np.concatenate(arr.ravel())                                                                           
Out[142]: 
array([33120, 28985,  9327, 45918, 30035, 17794, 40141,  1819, 43668,
       33754, 24838, 17704, 21903, 17668, 46667, 17461, 32665, 46842,
       26434, 39758, 27761, 10054, 21351, 22598, 34862, 40285, 17616,
       25146, 32645, 41276, 24534,  8230, 14267,  9352,  3543, 29397,
         900, 32398, 34262, 37646, 11930, 37173, 25157,  8859, 20850,
       19322,  8075])

The shape is 2d:

In[143]: arr.shapeOut[143]: (6, 1)

arr.ravel() makes it 1d (6,), np.concatenate joins a list (or iterable) of arrays.

Post a Comment for "Python Flatten An Array Of Array"