我有一些数组
x = np.empty(3)
y = np.empty(3)
for i in range(len(x)):
x[i] = float(i)
y[i] = float(i + 3)
print(x, y)输出~ [0., 1., 2.], [3., 4., 5.]
我希望能够得到这个。
[0., 3., 1., 4., 2., 5.]我该怎么做呢?
我尝试了zip,但这似乎创建了一个可迭代类,而不是传递给它的对象的新实例。
我试过np.concatenate(),但它似乎没有"stride“选项,这与我可能正在寻找的东西大致相同。(然而,在搜索中没有运气)
发布于 2020-01-05 07:38:09
您可以使用np.stack((x, y), axis=1).ravel()。
发布于 2020-01-05 07:56:46
使用zip
np.ravel(list(zip(x,y)))输出:
[0. 3. 1. 4. 2. 5.]您可以通过将zip放入list构造函数中将其解包,然后使用numpy.ravel将其展平。
发布于 2020-01-05 15:15:07
在没有迭代的情况下创建数组:
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]])然后,我们可以对2d数组进行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])从压缩包中创建一个列表:
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])https://stackoverflow.com/questions/59595770
复制相似问题