对于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)],:]
,这可能很慢。
答案 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]])