如何将2个1维数组转换为一个1维数组,但两个值都应该在一个元素内

2024-04-25 18:12:09 发布

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

我真的不知道如何正确表达这一点,所以我提前道歉。 假设我有2,1D数组

array1 = [2000, 2100, 2800]
array2 =[20, 80, 40]

现在我如何在python中将它们转换成如下所示的2d数组

2dArray = [[2000, 20], [2100, 80], [2800, 40]]

所以2个id数组看起来像上面python中的数组。你知道吗


Tags: id数组中将array1array2
1条回答
网友
1楼 · 发布于 2024-04-25 18:12:09

简单NumPy解决方案-np.array([...]).T

In [6]: np.array([a1, a2]).T
Out[6]:
array([[2000,   20],
       [2100,   80],
       [2800,   40]])

另一个NumPy解决方案,使用vstack()方法:

In [142]: np.vstack((array1, array2)).T
Out[142]:
array([[2000,   20],
       [2100,   80],
       [2800,   40]])

或使用np.column_stack()

In [144]: np.column_stack([array1, array2])
Out[144]:
array([[2000,   20],
       [2100,   80],
       [2800,   40]])

另一个“慢”的解决方案是使用内置的zip()函数?你知道吗

In [131]: np.array(list(zip(array1, array2)))
Out[131]:
array([[2000,   20],
       [2100,   80],
       [2800,   40]])

说明:

In [132]: list(zip(array1, array2))
Out[132]: [(2000, 20), (2100, 80), (2800, 40)]

定时对于两个1M单元阵列:

In [145]: a1 = np.random.randint(0, 10**6, 10**6)

In [146]: a2 = np.random.randint(0, 10**6, 10**6)

In [147]: a1.shape
Out[147]: (1000000,)

In [148]: a2.shape
Out[148]: (1000000,)

In [149]: %timeit np.array(list(zip(a1, a2)))
1 loop, best of 3: 1.78 s per loop

In [150]: %timeit np.vstack((a1, a2)).T
100 loops, best of 3: 6.4 ms per loop

In [151]: %timeit np.column_stack([a1, a2])
100 loops, best of 3: 7.62 ms per loop

In [14]: %timeit np.array([a1, a2]).T
100 loops, best of 3: 6.36 ms per loop     # < - WINNER!

相关问题 更多 >