Numpy:如何添加/连接切片对象?

时间:2015-10-18 09:30:59

标签: python algorithm numpy indexing

对于2*N x 2*N数组x,我想以特定方式将行[0:N]与行[N:2*N]交换,即我的问题是,如果有一个内置的'添加/加入'的方式切片对象实现这个?即类似的东西:

x[N:2*N + 0:N,:]

尽管如此,前面的做法有所不同。

当然,我可以做vstack((x[N:2*N,:],x[0:N,:]))之类的事情,这不是我正在寻找的事情,或x[[i for i in range(N)]+[i for i in range(N,2*N)],:],这可能很慢。

1 个答案:

答案 0 :(得分:1)

我认为你正在寻找numpy.r_,它“将切片对象转换为沿第一轴的连接”。它允许您沿第一个轴执行更复杂的切片 - 您可以使用逗号连接多个切片:np.r_[5:10, 100:200:10, 15, 20, 0:5]

例如:

>>> import numpy as np
>>> N = 2
>>> x = np.arange(16).reshape(4, 4)
>>> x[np.r_[N:2*N, 0:N]]
array([[ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [ 0,  1,  2,  3],
       [ 4,  5,  6,  7]])

在这种特定情况下,你也可以np.roll

>>> np.roll(x, N, axis=0)
array([[ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [ 0,  1,  2,  3],
       [ 4,  5,  6,  7]])