2013-07-04 31 views
3

我正在尝试使用数组分片来反转NumPy数组的一部分。如果我的阵列,例如,使用NumPy反转数组的部分

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

话,我可以得到一个片b

b = a[::-1] 

这是原来阵列上的看法。我想是部分逆转视图,例如

1,4,3,2,5,6 

我所遇到的性能问题NumPy的,如果你不准确以及它是如何设计的发挥,所以我想避免“花哨“索引如果可能的话。

回答

5

如果你不喜欢过一个指数

>>> a = np.array([1,2,3,4,5,6]) 
>>> a[1:4] = a[1:4][::-1] 
>>> a 
array([1, 4, 3, 2, 5, 6]) 
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]) 
0

您可以使用permutation matrices(这是最简单的方式来部分反转数组)。

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])