Skip to main content
 首页 » 编程设计

python之通过交换维度重组列表并转换为 numpy

2025年05月04日19Leo_wl

我有以下格式的列表列表:

[ [[a1_1, a1_2, a1_3, a1_4], [b1_1, b1_2, b1_3, b1_4]], 
  [[a2_1, a2_2, a2_3, a2_4], [b2_1, b2_2, b2_3, b2_4]], 
         : 
         : 
  [[a10_1, a10_2, a10_3, a10_4], [b10_1, b10_2, b10_3, b10_4]] ] 

除了迭代每个元素并将其添加到新结构之外,是否有一种优雅的方式来完成以下操作:

将列表重组为:

  [ [[ a1_1,  b1_1], [a1_2, b1_2], [a1_3, b1_3], [a1_4, b1_4]],  
    [[ a2_1,  b2_1], [a2_2, b2_2], [a2_3, b2_3], [a2_4, b2_4]], 
               : 
               : 
    [[ a10_1,  b10_1], [a10_2, b10_2], [a10_3, b10_3], [a10_4, b10_4]] ] 

然后将上面的list of list列表转换为10 x 4 x 2形状的numpy结构。谢谢!

请您参考如下方法:

您可以 use tranpose这里:

import numpy as np 
 
ar = np.array(data) 

然后:

ar.transpose((0,2,1)) 

或等价物:

ar.transpose(0,2,1) 

如果我将字符串写入变量,然后使用您的示例数据,我会得到:

>>> ar 
array([[['a_1_1', 'a_1_2', 'a_1_3', 'a_1_4'], 
        ['b_1_1', 'b_1_2', 'b_1_3', 'b_1_4']], 
 
       [['a_2_1', 'a_2_2', 'a_2_3', 'a_2_4'], 
        ['b_2_1', 'b_2_2', 'b_2_3', 'b_2_4']], 
 
       [['a_10_1', 'a_10_2', 'a_10_3', 'a_10_4'], 
        ['b_10_1', 'b_10_2', 'b_10_3', 'b_10_4']]], 
      dtype='<U6') 
>>> ar.transpose((0,2,1)) 
array([[['a_1_1', 'b_1_1'], 
        ['a_1_2', 'b_1_2'], 
        ['a_1_3', 'b_1_3'], 
        ['a_1_4', 'b_1_4']], 
 
       [['a_2_1', 'b_2_1'], 
        ['a_2_2', 'b_2_2'], 
        ['a_2_3', 'b_2_3'], 
        ['a_2_4', 'b_2_4']], 
 
       [['a_10_1', 'b_10_1'], 
        ['a_10_2', 'b_10_2'], 
        ['a_10_3', 'b_10_3'], 
        ['a_10_4', 'b_10_4']]], 
      dtype='<U6') 

transpose 将一个数组和一个索引列表作为输入。它重新排列索引,这样(如果我们给它 (0,2,1)),旧的第一个 (0) 维度;是新的第一个维度,旧的第三个(2)维度,是新的第二个维度,旧的第二个(1)维度是新的第三个维度。