【问题标题】:如果第一个索引值相似,则将 numpy 数组合并到列表中[重复]
【发布时间】:2022-01-23 15:53:11
【问题描述】:

如果第一个索引值相同,如何将二维数组中的数组组合成一个列表?

比如说,这个二维数组:

[[0 0]
 [0 3]
 [0 4]
 [1 1]
 [2 2]
 [3 0]
 [3 3]
 [3 4]
 [4 0]
 [4 3]
 [4 4]]

我将如何做到这一点?

[[0, 0, 3, 4], [1 1], [2 2], [3 0 3 4], [4 0 3 4]]

从 numpy 转换为 list 时,我需要对其进行优化,因为我的端有数千行。

非常感谢任何建议。最终目标是我希望将第二个索引值组合在一起。

另外,如果第一个索引值不是按升序排列的,请考虑。

【问题讨论】:

  • 输出不是一个有效的 numpy 数组(除非使用的对象类型不是很有用)
  • @mozway 我会编辑它。输出应该是一个列表。

标签: python python-3.x numpy


【解决方案1】:

你可以这样做:

my_list = [
    [0, 0],
    [0, 3],
    [0, 4],
    [1, 1],
    [2, 2],
    [3, 0],
    [3, 3],
    [3, 4],
    [4, 0],
    [4, 3],
    [4, 4]
    ]

from collections import defaultdict

d = defaultdict(list)
for i, j in my_list:
    d[i].append(j)

combined = [[i]+l for i,l in d.items()]

【讨论】:

    【解决方案2】:
    import numpy as np
    import pandas as pd
    
    
    ll = [[0, 0], [0, 3], [0, 4], [1, 1], [2, 2], [3, 0], [3, 3], [3, 4], [4, 0], [4, 3], [4, 4]]
    x = np.array(ll)
    df = pd.DataFrame(x)
    dx = df.groupby(0).apply(lambda g: g[1].tolist())
    [[x[0], *x[1]] for x in zip(dx.index.tolist(), dx.values.tolist())]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-15
      • 2018-10-25
      • 2021-01-04
      • 2012-02-11
      • 2022-07-07
      • 1970-01-01
      • 2011-08-27
      • 2021-11-12
      相关资源
      最近更新 更多