关于python:使用NumPy反转数组的一部分

Reverse part of an array using NumPy

我尝试使用数组切片来反转一个麻木数组的一部分。例如,如果我的数组是,

1
a = np.array([1,2,3,4,5,6])

然后我可以得到一片B

1
b = a[::-1]

它是原始数组上的视图。我想要的是一个部分颠倒的视图,例如

1
1,4,3,2,5,6

如果您不完全理解numpy的设计方式,我会遇到numpy的性能问题,因此如果可能的话,我希望避免使用"花哨的"索引。


如果你不喜欢一个指数

1
2
3
4
>>> a = np.array([1,2,3,4,5,6])
>>> a[1:4] = a[1:4][::-1]
>>> a
array([1, 4, 3, 2, 5, 6])

1
2
3
4
>>> a = np.array([1,2,3,4,5,6])
>>> a[1:4] = a[3:0:-1]
>>> a
array([1, 4, 3, 2, 5, 6])


您可以使用排列矩阵(这是部分反转数组的最麻木的方法)。

1
2
3
4
5
6
7
8
9
10
a = np.array([1,2,3,4,5,6])
new_order_for_index = [1,4,3,2,5,6] # Careful: index from 1 to n !

# Permutation matrix
m = np.zeros( (len(a),len(a)) )
for index , new_index  in enumerate(new_order_for_index ):
    m[index ,new_index -1] = 1

print np.dot(m,a)
# np.array([1,4,3,2,5,6])