如何合并存储在 python 中的嵌套列表中的 numpy 数组

How to merge numpy arrays stored in a nested list in python

我有一个 numpy 数组列表,想根据数组的长度将其分成块。这是我的清单:

import numpy as np
nums=[[np.array([[1.]]), np.array([[2.]])],\
      [np.array([[3.]]), np.array([[5.]])],\
      [np.array([[3.], [3.]]), np.array([[8.], [9.]])],\
      [np.array([[8.], [9.]]), np.array([[1.], [2.]])],\
      [np.array([[5.]]), np.array([[1.]])]]

每个子列表总是有两个长度相似的数组。前两个子列表应该合并,因为它们的数组长度相同 (1)。我只采用独特的阵列。第三个和第四个子列表应该合并,因为长度相同(2)。这两个子列表有一个公共数组(np.array([[8.], [9.]])),我只采用唯一数组。最后一个子列表也是另一个拆分。实际上我有几个子列表,但我想使用相同的规则来合并它们。最后,我想得到我的列表:

arri=[[np.array([[1.]]), np.array([[2.]]),\
       np.array([[3.]]), np.array([[5.]])],\ # first chunk
      [np.array([[3.], [3.]]), np.array([[8.], [9.]]),\
       np.array([[1.], [2.]])],\ # second chunk
      [np.array([[5.]]), np.array([[1.]])]] # third chunk

我尝试了以下代码但没有成功:

arri=[]
for i in range (len (nums)-1):
    if (len(nums[i][0]) == len(nums[i+1][0]) and
        any((nums[i+1][0] == x).all() for x in nums[i])):
        arri.append ([nums[i], nums[i+1]])

提前,我非常感谢任何帮助。

听起来你想 groupby 然后 flatten:

from itertools import groupby

def flatten(xss):
    return [x for xs in xss for x in xs]

key = lambda x: (x[0].size, x[1].size)

results = [flatten(g) for _, g in groupby(nums, key)]

为了进一步只保留每一行中唯一的数组,可以使用 dict:

unique_results = [
    list({tuple(x.reshape(-1)): x for x in xs}.values()) for xs in results
]

给出:

[
 [  array([[1.]]), array([[2.]]), array([[3.]]), array([[5.]])     ],
 [  array([[3.], [3.]]), array([[8.], [9.]]), array([[1.], [2.]])  ],
 [  array([[5.]]), array([[1.]])                                   ],
]