代码之家  ›  专栏  ›  技术社区  ›  Rogério Gouvêa

打开内部numpy阵列的包装

  •  0
  • Rogério Gouvêa  · 技术社区  · 2 年前

    我有以下numpy阵列:

    a=[['Sb' array([4.24035696, 2.44817292, 7.41858935])]
     ['I' array([2.08076032, 3.69501392, 5.37518666])]
     ['I' array([6.35173963, 1.22916823, 8.9947238 ])]
     ['I' array([ 4.24036048, -0.04551256,  5.37518684])]
     ['I' array([4.24035383, 4.88618543, 8.99472472])]
     ['I' array([6.3999514 , 3.69501663, 5.37518685])]
     ['I' array([2.12897688, 1.22916548, 8.99472467])]]
    

    我想打开内部阵列的包装,以便:

    a=[['Sb' 4.24035696 2.44817292 7.41858935]
     ...
     ['I' 2.12897688 1.22916548 8.99472467]]
    

    我无法用一种简单的方式来理解这个问题。

    1 回复  |  直到 2 年前
        1
  •  1
  •   hpaulj    2 年前

    请参见我的评论以获取解释:

    In [142]: array=np.array
         ...: a=np.array([['Sb', array([4.24035696, 2.44817292, 7.41858935])],
         ...:  ['I', array([2.08076032, 3.69501392, 5.37518666])],
         ...:  ['I', array([6.35173963, 1.22916823, 8.9947238 ])],
         ...:  ['I', array([ 4.24036048, -0.04551256,  5.37518684])],
         ...:  ['I', array([4.24035383, 4.88618543, 8.99472472])],
         ...:  ['I', array([6.3999514 , 3.69501663, 5.37518685])],
         ...:  ['I', array([2.12897688, 1.22916548, 8.99472467])]], dtype=object)
    
    In [143]: a
    Out[143]: 
    array([['Sb', array([4.24035696, 2.44817292, 7.41858935])],
           ['I', array([2.08076032, 3.69501392, 5.37518666])],
           ['I', array([6.35173963, 1.22916823, 8.9947238 ])],
           ['I', array([ 4.24036048, -0.04551256,  5.37518684])],
           ['I', array([4.24035383, 4.88618543, 8.99472472])],
           ['I', array([6.3999514 , 3.69501663, 5.37518685])],
           ['I', array([2.12897688, 1.22916548, 8.99472467])]], dtype=object)
    
    In [144]: a[:,0]
    Out[144]: array(['Sb', 'I', 'I', 'I', 'I', 'I', 'I'], dtype=object)
    
    In [145]: np.stack(a[:,1])
    Out[145]: 
    array([[ 4.24035696,  2.44817292,  7.41858935],
           [ 2.08076032,  3.69501392,  5.37518666],
           [ 6.35173963,  1.22916823,  8.9947238 ],
           [ 4.24036048, -0.04551256,  5.37518684],
           [ 4.24035383,  4.88618543,  8.99472472],
           [ 6.3999514 ,  3.69501663,  5.37518685],
           [ 2.12897688,  1.22916548,  8.99472467]])
    

    将它们组合到对象数据类型数组中:

    In [148]: res = np.concatenate((a[:,[0]],np.stack(a[:,1])),axis=1,dtype=object)
    
    In [149]: res
    Out[149]: 
    array([['Sb', 4.24035696, 2.44817292, 7.41858935],
           ['I', 2.08076032, 3.69501392, 5.37518666],
           ['I', 6.35173963, 1.22916823, 8.9947238],
           ['I', 4.24036048, -0.04551256, 5.37518684],
           ['I', 4.24035383, 4.88618543, 8.99472472],
           ['I', 6.3999514, 3.69501663, 5.37518685],
           ['I', 2.12897688, 1.22916548, 8.99472467]], dtype=object)