无需迭代即可制作数组:
In [157]: x = np.arange(3); y = np.arange(3, 6)
In [158]: x, y
Out[158]: (array([0, 1, 2]), array([3, 4, 5]))
我们可以用
将它们加入一个二维数组
In [159]: np.array((x,y)) # np.vstack also works
Out[159]:
array([[0, 1, 2],
[3, 4, 5]])
然后我们可以ravel 或展平二维数组。通过指定fortran 顺序,我们得到你想要的交错:
In [160]: np.array((x,y)).ravel(order='F')
Out[160]: array([0, 3, 1, 4, 2, 5])
使用默认的 'c' 顺序:
In [161]: np.array((x,y)).ravel()
Out[161]: array([0, 1, 2, 3, 4, 5])
另一种方法是将它们堆叠为列:
In [162]: np.stack((x,y),axis=1)
Out[162]:
array([[0, 3],
[1, 4],
[2, 5]])
In [163]: np.stack((x,y),axis=1).ravel()
Out[163]: array([0, 3, 1, 4, 2, 5])
从 zip 制作列表:
In [164]: list(zip(x,y))
Out[164]: [(0, 3), (1, 4), (2, 5)]
这个列表是组;有一些方法可以使这样的列表变平。但我们也可以使用extend 将元组加入一个列表:
In [165]: alist = []
In [166]: for i,j in zip(x,y): alist.extend((i,j))
In [167]: alist
Out[167]: [0, 3, 1, 4, 2, 5]
vstack 和stack 是concatenate 的变体,以不同的方式调整数组尺寸,然后在不同的轴上连接。
In [169]: np.concatenate((x[:,None], y[:,None]),axis=1)
Out[169]:
array([[0, 3],
[1, 4],
[2, 5]])
另一种方式 - 加入行,并转置到列:
In [170]: np.array((x,y)).T
Out[170]:
array([[0, 3],
[1, 4],
[2, 5]])
还有另一种方式 - 将数组插入到目标中,指定间隔:
In [171]: res = np.zeros(6,int)
In [172]: res[::2] = x; res[1::2] = y
In [173]: res
Out[173]: array([0, 3, 1, 4, 2, 5])