将列表的numpy列表转换为表(可变长度)

2024-09-27 21:26:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要转换的数据如下所示:

array([(array(['test_00000001.jpg'], dtype='<U17'), array([[2694, 1211,  353,  353,    1,    9,  105,  144,  337,    2,    3,
           2,    2,    1,   -1,   -1,   -1,   -1],
       [1754, 1449,   68,   68,    3,   -1,   -1,   -1,   -1,   -1,   -1,
          -1,   -1,   -1,   -1,   -1,   -1,   -1]], dtype=int16)),
       (array(['test_00000002.jpg'], dtype='<U17'), array([[113,  95, 226, 226,   1,   9,  71, 181, 221,   1,   3,   1,   2,
          3,  -1,  -1,  -1,  -1]], dtype=int16)),
       (array(['test_00000003.jpg'], dtype='<U17'), array([[352, 114, 151, 151,   1,  17,  45, 137, 135,   1,   3,   2,   2,
          3,  -1,  -1,  -1,  -1],
       [799, 217, 139, 139,   2,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
         -1,  -1,  -1,  -1,  -1]], dtype=int16)),
       ...,
       (array(['test_00004933.jpg'], dtype='<U17'), array([[ 80, 121, 245, 245,   1,  50,  81, 238, 242,   1,   3,   2,   2,
          3,  -1,  -1,  -1,  -1]], dtype=int16)),
       (array(['test_00004934.jpg'], dtype='<U17'), array([[148, 266, 276, 276,   1,  38,  68, 265, 248,   1,   3,   2,   2,
          3,  -1,  -1,  -1,  -1]], dtype=int16)),
       (array(['test_00004935.jpg'], dtype='<U17'), array([[110,  98, 318, 318,   1,  73, 124, 313, 302,   1,   3,   2,   2,
          3,  -1,  -1,  -1,  -1]], dtype=int16))],
      dtype=[('name', 'O'), ('label', 'O')])

有两列-名称和标签。 标签列是一个数组,数组数量可变(不超过20个)。 我的目标是拆分标签列,使每一行只包含原始标签字段中的一个子数组。 例如,如果标签列如下所示:

[[arr1], [arr2]]
[[arr3], [arr4], [arr5]]

结果应该是

[arr1]
[arr2]
[arr3]
[arr4]
[arr5]

Tags: 数据nametest标签数组arrayjpgdtype
1条回答
网友
1楼 · 发布于 2024-09-27 21:26:59

从示例中重新创建阵列需要一些编辑,但我得到:

In [388]: A.shape                                                                                      
Out[388]: (6,)
In [389]: A.dtype                                                                                      
Out[389]: dtype([('name', 'O'), ('label', 'O')])

这是一个1d数组,有两个字段,每个字段都有对象数据类型。一个字段包含字符串数据类型的1d数组:

In [390]: A['name']                                                                                    
Out[390]: 
array([array(['test_00000001.jpg'], dtype='<U17'),
       array(['test_00000002.jpg'], dtype='<U17'),
       array(['test_00000003.jpg'], dtype='<U17'),
       array(['test_00004933.jpg'], dtype='<U17'),
       array(['test_00004934.jpg'], dtype='<U17'),
       array(['test_00004935.jpg'], dtype='<U17')], dtype=object)

另一个包含数组:

In [391]: A['label']                                                                                   
Out[391]: 
array([array([[2694, 1211,  353,  353,    1,    9,  105,  144,  337,    2,    3,
           2,    2,    1,   -1,   -1,   -1,   -1],
       [1754, 1449,   68,   68,    3,   -1,   -1,   -1,   -1,   -1,   -1,
          -1,   -1,   -1,   -1,   -1,   -1,   -1]], dtype=int16),
       array([[113,  95, 226, 226,   1,   9,  71, 181, 221,   1,   3,   1,   2,
          3,  -1,  -1,  -1,  -1]], dtype=int16),
       array([[352, 114, 151, 151,   1,  17,  45, 137, 135,   1,   3,   2,   2,
          3,  -1,  -1,  -1,  -1],
       [799, 217, 139, 139,   2,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
         -1,  -1,  -1,  -1,  -1]], dtype=int16),
       array([[ 80, 121, 245, 245,   1,  50,  81, 238, 242,   1,   3,   2,   2,
          3,  -1,  -1,  -1,  -1]], dtype=int16),
       array([[148, 266, 276, 276,   1,  38,  68, 265, 248,   1,   3,   2,   2,
          3,  -1,  -1,  -1,  -1]], dtype=int16),
       array([[110,  98, 318, 318,   1,  73, 124, 313, 302,   1,   3,   2,   2,
          3,  -1,  -1,  -1,  -1]], dtype=int16)], dtype=object)

检查其形状:

In [392]: [i.shape for i in A['label']]                                                                
Out[392]: [(2, 18), (1, 18), (2, 18), (1, 18), (1, 18), (1, 18)]

给定这些形状,我可以将它们与vstack组合成一个2d数组。这是变量first dimension唯一可能的结果:

In [393]: np.vstack(A['label'])                                                                        
Out[393]: 
array([[2694, 1211,  353,  353,    1,    9,  105,  144,  337,    2,    3,
           2,    2,    1,   -1,   -1,   -1,   -1],
       [1754, 1449,   68,   68,    3,   -1,   -1,   -1,   -1,   -1,   -1,
          -1,   -1,   -1,   -1,   -1,   -1,   -1],
       [ 113,   95,  226,  226,    1,    9,   71,  181,  221,    1,    3,
           1,    2,    3,   -1,   -1,   -1,   -1],
       [ 352,  114,  151,  151,    1,   17,   45,  137,  135,    1,    3,
           2,    2,    3,   -1,   -1,   -1,   -1],
       [ 799,  217,  139,  139,    2,   -1,   -1,   -1,   -1,   -1,   -1,
          -1,   -1,   -1,   -1,   -1,   -1,   -1],
       [  80,  121,  245,  245,    1,   50,   81,  238,  242,    1,    3,
           2,    2,    3,   -1,   -1,   -1,   -1],
       [ 148,  266,  276,  276,    1,   38,   68,  265,  248,    1,    3,
           2,    2,    3,   -1,   -1,   -1,   -1],
       [ 110,   98,  318,  318,    1,   73,  124,  313,  302,    1,    3,
           2,    2,    3,   -1,   -1,   -1,   -1]], dtype=int16)
In [394]: _.shape                                                                                      
Out[394]: (8, 18)

这些名称可以组合成一个字符串数组:

In [395]: np.hstack(A['name'])                                                                         
Out[395]: 
array(['test_00000001.jpg', 'test_00000002.jpg', 'test_00000003.jpg',
       'test_00004933.jpg', 'test_00004934.jpg', 'test_00004935.jpg'],
      dtype='<U17')

相关问题 更多 >

    热门问题