Skip to main content
 首页 » 编程设计

python展平数组数组

2025年05月04日21qq号

我有一个数组数组,类似这样的东西:

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([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, dtype=object) 

我为此搜索了一些解决方案,但似乎所有这些都适用于 np.array 或列表,不适用于数组。

    functools.reduce(operator.iconcat, orders2.values.tolist(), []) 
[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),... 
    orders2.values.flatten() 
array([array([33120, 28985,  9327, 45918, 30035, 17794, 40141,  1819, 43668], 
      dtype=int64), 
       array([33754, 24838, 17704, 21903, 17668, 46667, 17461, 32665], 
      dtype=int64), 

我什至无法将数组转换为列表

[sub.tolist() for sub in orders2.values] 
    [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),... 
        orders2.values.flatten() 
    array([array([33120, 28985,  9327, 45918, 30035, 17794, 40141,  1819, 43668], 
          dtype=int64), 
           array([33754, 24838, 17704, 21903, 17668, 46667, 17461, 32665], 
          dtype=int64),... 

我发现很难获得有关数组类的一些信息,一切都是列表或 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) 
>>> 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]) 
>>>