如何映射具有相同索引的2个Numpy数组

时间:2018-06-20 19:45:40

标签: python numpy

我试图将2个numpy数组映射为[x,y],类似于zip对列表和元组所做的操作。

我有2个numpy数组,如下所示:

arr1 = [1, 2, 3, 4]
arr2 = [5, 6, 7, 8]

我正在寻找output as np.array([[[1, 5], [2, 6], [3, 7], [4, 8]]])

我尝试了这个,但是它映射了每个值,并且没有相同的索引。我可以在此处添加更多if条件,但是还有其他方法可以这样做,而无需添加if条件。

res = [arr1, arr2] for a1 in arr1 for a2 in arr2]

3 个答案:

答案 0 :(得分:2)

IIUC,一种方法是使用numpy.vstack(),然后使用transpose()

import numpy as np
arr1 = np.array([1, 2, 3, 4])
arr2 = np.array([5, 6, 7, 8])
print(np.vstack([arr1, arr2]).transpose())
#array([[1, 5],
#       [2, 6],
#       [3, 7],
#       [4, 8]])

或者您可以将zip的输出传递给array构造函数:

print(np.array(zip(arr1, arr2)))
#array([[1, 5],
#       [2, 6],
#       [3, 7],
#       [4, 8]])

答案 1 :(得分:2)

您正在寻找np.dstack

  

沿序列深度方向(沿第三轴)堆叠数组。

np.dstack([arr1, arr2])

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

答案 2 :(得分:0)

内置zip命令是您的工作。它会完全按照您的要求进行。

arr1 = [1,2,3,4]
arr2 = [5,6,7,8]
list(zip(arr1, arr2))
[(1, 5), (2, 6), (3, 7), (4, 8)]

https://docs.python.org/3/library/functions.html#zip