将两个numpy数组合并到元组列表的列表中

时间:2019-02-28 21:13:09

标签: python numpy

我一直无法弄清楚。感谢您的帮助:

拥有:

>>> x = np.array([[1,2],[5,6]])
>>> x
array([[1, 2],
       [5, 6]])
>>> y = np.array([[3,4],[7,8]])
>>> y
array([[3, 4],
       [7, 8]])

想要:

>>> z = [[(1,2),(3,4)],[(5,6),(7,8)]]
>>> z
[[(1, 2), (3, 4)], [(5, 6), (7, 8)]]

6 个答案:

答案 0 :(得分:1)

尝试一下:

x_z = map(tuple,x)
y_z = map(tuple,y)
[list(i) for i in zip(x_z, y_z)]

输出:

[[(1, 2), (3, 4)], [(5, 6), (7, 8)]]

答案 1 :(得分:1)

这是一个有趣的问题。这是我想出的:

print([list(map(tuple, i)) for i in zip(x, y)])
# [[(1, 2), (3, 4)], [(5, 6), (7, 8)]]

基本上,将x和y压缩可得到:

[(array([1, 2]), array([3, 4])), (array([5, 6]), array([7, 8])]

然后将每个元素首先转换为列表,然后转换为元组

答案 2 :(得分:0)

如果要遍历每个矩阵的行,可以执行以下操作:

for (row1, row2) in zip(x,y):
    yield [tuple(row1), tuple(row2)]
       #  [ (1,2)     ,  (3,4)     ]

这将为您提供一个生成器(如果将其包装在函数中),但是您需要一个列表。因此,将其包装成一个理解:

[ [tuple(row1),tuple(row2)] for (row1, row2) in zip(x,y) ]

答案 3 :(得分:0)

x = list([[1,2],[5,6]])
y = list([[3,4],[7,8]])
x
[[1, 2], [5, 6]]
y
[[3, 4], [7, 8]]
z=list(zip(x,y))
z
[([1, 2], [3, 4]), ([5, 6], [7, 8])]

答案 4 :(得分:0)

IIUC

z=np.array([x,y])
[list(map(tuple,z[:,x]))for x in range(len(x))]
Out[223]: [[(1, 2), (3, 4)], [(5, 6), (7, 8)]]

答案 5 :(得分:0)

对于它的价值,这是最简单,最有效的(但可能是最不通用的)解决方案:

result = [[(x[0,0], x[0,1]), (y[0,0], y[0,1])],
         [(x[1,0], x[1,1]), (y[1,0], y[1,1])]]

输出:

[[(1, 2), (3, 4)], [(5, 6), (7, 8)]]

诚然,它没有泛化,但问题是-泛化需要朝哪个方向发展?更长的外部尺寸?内部尺寸更长?这个问题不需要任何概括。

根据明确规定的要求,当然可以修改此解决方案以使其随需而变