zip()将三个二维数组放入3个元组中

2024-04-25 20:02:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在元组中压缩(),3个不同的二维数组。我有三个维度为128x512的二维数组,我想压缩所有3个数组数组,这样我就得到一个65536个元组的列表,每个元组都是一个3值元组。在

例如:

假设我有三个二维数组,比如:

[[0,1,2, ....], [0,1,2, ....], ....] X 3

拉上拉链后

^{pr2}$

我知道dstack,但它不返回值的元组,它返回另一个三维数组(128512,3)。我使用dstack的代码是

tuple_list = np.dstack((a_2d_list, b_2d_list))
tuple_list = np.dstack((tuple_list, c_2d_list))

另外,我已经用循环做了,但我只是在寻找一个更有效的解决方案。如果有什么建议,我将不胜感激。在


Tags: 代码列表np数组解决方案建议list拉链
1条回答
网友
1楼 · 发布于 2024-04-25 20:02:39

方法1

您可以向dstack输出添加一个整形以获得2D数组,然后将所有行映射到元组-

list(map(tuple,np.dstack((a,b,c)).reshape(-1,3)))

样本运行-

^{pr2}$

方法2

另一个具有循环理解和zip的性能-

[(i,j,k) for i,j,k in zip(a.ravel(),b.ravel(),c.ravel())]

既然问题是关于性能的问题,下面是一些与问题中提到的形状相同的数据集的计时-

In [186]: a = np.random.randint(11,99,(128,512))

In [187]: b = np.random.randint(11,99,(128,512))

In [188]: c = np.random.randint(11,99,(128,512))

In [189]: %timeit list(map(tuple,np.dstack((a,b,c)).reshape(-1,3)))
10 loops, best of 3: 60.2 ms per loop

In [190]: %timeit [(i,j,k) for i,j,k in zip(a.ravel(),b.ravel(),c.ravel())]
100 loops, best of 3: 15.5 ms per loop

相关问题 更多 >