【问题标题】:How to zip list of numpy arrays?如何压缩numpy数组列表?
【发布时间】:2020-10-31 10:47:17
【问题描述】:

我有一个 numpy 数组的字典:

{'data1': array([[0.16461831, 0.82400555],
        [0.02958593, 0.483629  ],
        [0.51268564, 0.07030046],
        [0.17027816, 0.35304705]]),
 'data2': array([[0.8292598 , 0.78136548],
        [0.30389913, 0.69250432],
        [0.66608852, 0.42237639],
        [0.72678807, 0.40486951]]),
 'data3': array([[0.45614633, 0.96677904],
        [0.87066105, 0.75826116],
        [0.39431988, 0.73041888],
        [0.65685809, 0.65498308]])}

预期输出:

[([0.16461831, 0.82400555], [0.8292598 , 0.78136548], [0.45614633, 0.96677904]), 
 ([0.02958593, 0.483629 ],  [0.66608852, 0.42237639], [0.87066105, 0.75826116]), 
 ([0.51268564, 0.07030046], [0.66608852, 0.42237639], [0.39431988, 0.73041888]), 
 ([0.17027816, 0.35304705], [0.72678807, 0.40486951], [0.65685809, 0.65498308])]

但是当我尝试使用 zip 时:

list(zip(data.values()))

得到这个输出:

[(array([[0.16461831, 0.82400555],
         [0.02958593, 0.483629  ],
         [0.51268564, 0.07030046],
         [0.17027816, 0.35304705]]),),
 (array([[0.8292598 , 0.78136548],
         [0.30389913, 0.69250432],
         [0.66608852, 0.42237639],
         [0.72678807, 0.40486951]]),),
 (array([[0.45614633, 0.96677904],
         [0.87066105, 0.75826116],
         [0.39431988, 0.73041888],
         [0.65685809, 0.65498308]]),)]

如何压缩 numpy 数组列表?

【问题讨论】:

  • @ggorlen 什么都可以,一个 numpy 数组的元组或一个列表的元组。

标签: python python-3.x list numpy dictionary


【解决方案1】:

使用

list(zip(*data.values())

输出:

[(array([0.16461831, 0.82400555]),
  array([0.8292598 , 0.78136548]),
  array([0.45614633, 0.96677904])),
 (array([0.02958593, 0.483629  ]),
  array([0.30389913, 0.69250432]),
  array([0.87066105, 0.75826116])),
 (array([0.51268564, 0.07030046]),
  array([0.66608852, 0.42237639]),
  array([0.39431988, 0.73041888])),
 (array([0.17027816, 0.35304705]),
  array([0.72678807, 0.40486951]),
  array([0.65685809, 0.65498308]))]

【讨论】:

    【解决方案2】:

    如果 3D 数组适合您,您可以只在第二轴上使用 stack (axis=1):

    np.stack(data.values(), axis=1)
    
    #[[[0.16461831 0.82400555]
    #  [0.8292598  0.78136548]
    #  [0.45614633 0.96677904]]
    
    # [[0.02958593 0.483629  ]
    #  [0.30389913 0.69250432]
    #  [0.87066105 0.75826116]]
    
    # [[0.51268564 0.07030046]
    #  [0.66608852 0.42237639]
    #  [0.39431988 0.73041888]]
    
    # [[0.17027816 0.35304705]
    #  [0.72678807 0.40486951]
    #  [0.65685809 0.65498308]]]
     
    

    【讨论】:

      【解决方案3】:

      以下代码将创建您的输出:

      tmp = [data[d].tolist() for d in data]      
      tmp = list(zip(*tmp))
      

      输出:

      [([0.16461831, 0.82400555], [0.8292598, 0.78136548], [0.45614633, 0.96677904]), ([0.02958593, 0.483629], [0.30389913, 0.69250432], [0.87066105, 0.75826116]), ([0.51268564, 0.07030046], [0.66608852, 0.42237639], [0.39431988, 0.73041888]), ([0.17027816, 0.35304705], [0.72678807, 0.40486951], [0.65685809, 0.65498308])]

      this 链接将解释* 语法

      【讨论】:

        【解决方案4】:

        另一种方式:

        [tuple(x) for x in np.stack(data.values(),axis=1).tolist()]
        
        [([0.16461831, 0.82400555], [0.8292598, 0.78136548], [0.45614633, 0.96677904]), 
         ([0.02958593, 0.483629], [0.30389913, 0.69250432], [0.87066105, 0.75826116]), 
         ([0.51268564, 0.07030046], [0.66608852, 0.42237639], [0.39431988, 0.73041888]), 
         ([0.17027816, 0.35304705], [0.72678807, 0.40486951], [0.65685809, 0.65498308])]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-12-26
          • 1970-01-01
          • 1970-01-01
          • 2023-04-05
          • 2017-11-08
          • 2023-02-04
          • 2018-01-04
          • 2018-11-03
          相关资源
          最近更新 更多