如何有效地将2d numpy数组转换为1d numpy数组的元组?

时间:2016-12-02 15:54:06

标签: python arrays list numpy

我发现使用迭代器从列表到元组的this question,但我处理的是大数据集。

我发现this question从元组到列表,实际上有一堆问题从元组列表到数组,但我还没有找到如何向另一个方向发展...

我有:

np.arrray([[   0    1]
           [   1    1]
           [   2    1]
           ..., 
           [1004    3]
           [1005    1]
           [1006    1]])

我想:

np.arrray([(   0    1)
           (   1    1)
           (   2    1)
           ..., 
           (1004    3)
           (1005    1)
           (1006    1)])

我不一定需要一大堆元组,但我想要有效地做到这一点。

2 个答案:

答案 0 :(得分:5)

要有效地矢量化此转换,请进行转置

a = np.array([[   0 ,   1],
              [   1 ,   1],
              [   2 ,   1],
              [   0 ,   1],
              [   1 ,   1],
              [   2 ,   1] ])

at = a.T 

at= array([[0, 1, 2, 0, 1, 2],
          [1, 1, 1, 1, 1, 1]])

然后zip将两个1D列表转换为元组列表

zip(at[0],at[1])

这将明显快于列表理解

但是在python 3.4中

list(zip(at[0],at[1])

Out []:
[(0, 1), (1, 1), (2, 1), (0, 1), (1, 1), (2, 1)]
编辑:感谢@Divakar

直接切片可能会稍快一些:zip(a[:,0], a[:,1])

答案 1 :(得分:0)

您可以使用一些简单直接的 Python 并获取元组列表(或其他任何内容):

list(map(tuple, arr))

其中 map() 只是将 tuple() 依次应用于数组的每一行。