如何以这种特定方式连接两个数组

时间:2019-01-09 11:42:00

标签: python arrays list numpy

我是python的新手。我想知道如何以这种特殊方式连接数组a和b。

我尝试使用stack,vstack,hstack,concatenate等等,但是仍然无法获得想要的结果。

a=  [[   0],
     [   1],
     [   2],
     [   3],
     [   4],
     [   5],
     [   6]]

b=  [[1,2,3],
     [1,2,3],
     [1,2,3],
     [1,2,3],
     [1,2,3],
     [1,2,3],
     [1,2,3]]

c = np.somefunction(a,b)


c = [
    [[0],[1,2,3]],
    [[1],[1,2,3]],
    [[2],[1,2,3]],
    [[3],[1,2,3]],
    [[4],[1,2,3]],
    [[5],[1,2,3]],
    [[6],[1,2,3]],
    ]

4 个答案:

答案 0 :(得分:2)

问题是您有一个锯齿状的数组。换句话说,列表列表中的每个子列表的长度都不相同,因此无法构造常规的NumPy int数组。

因此,您可以使用简单的列表理解或map。我假设您的a列表列表以[0]开头并以[5]结尾:

c = [[i, j] for i, j in zip(a, b)]  # list comprehension
c = list(map(list, zip(a, b)))      # functional version

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

可以将其转换为数组,但是它将具有object dtype。在大多数情况下,与常规的Python列表列表相比,它没有什么好处:

c_arr = np.array(c)

# array([[[0], [1, 2, 3]],
#        [[1], [1, 2, 3]],
#        [[2], [1, 2, 3]],
#        [[3], [1, 2, 3]],
#        [[4], [1, 2, 3]],
#        [[5], [1, 2, 3]]], dtype=object)

答案 1 :(得分:2)

您可以使用列表推导。由于两个数组的尺寸不匹配,因此无法在NumPy中使用concatenate。在这里,我假设您要从1开始数组a。如果不是,则可以简单地将a[1:]替换为a

c = [list(i) for i in zip(a[1:],b)]

[[[1], [1, 2, 3]],
 [[2], [1, 2, 3]],
 [[3], [1, 2, 3]],
 [[4], [1, 2, 3]],
 [[5], [1, 2, 3]],
 [[6], [1, 2, 3]]]

答案 2 :(得分:0)

aaa和繁荣:

c = list(zip(a,b))
print([list(x) for x in c])

pyFiddle

答案 3 :(得分:0)

您的数组看起来像列表,在这种情况下,以下内容可能会有所帮助

c=[list(i) for i in zip(a,b)]

否则,如果它们是numpy数组,this link可能会对您有所帮助。