2011-12-15 6 views
0

私は配列の循環的な並べ替えを行うことができるスライスといくつかのトリッキーがあるのだろうかと思っていた。基本的に私はi,j,kような整数であるかどうかを知り何をしたい:私は自然な構文があることだろうと思った循環置換を行うためにnumpyスライスを使用する方法はありますか?

> x = np.arange(10) 
> print x[i:j:k] 
     [9,0,1,2,3,4,5,6,7,8] 

> x = np.arange(10) 
> print x[i:j:k] 
     [1,2,3,4,5,6,7,8,9,0] 

import numpy as np 

x = np.arange(10) 
print x[-1:0] 

それは空を返しますが、配列(それはちょっと意味があります...)。また、スライスの他の組み合わせを試し、何も働かなかった。私は他の方法でそれをすることができましたが、これはすごく短くなるでしょう:P

ありがとう。

+1

わかりません。 'x [i:j:k] == x [i:j:k]'である。 –

+0

彼は、両方の方向でnumpy.rollが行うことを達成するスライシング方法を探しています。 – Benjamin

+0

申し訳ありません@SteveTjoa私は、2つの異なる並べ替えを実行する2つの異なるセットのi、j、およびkを意味しました。私は経済のためだけに同じ手紙を使いました。 –

答えて

3

numpy.roll()またはいくつかのストライドトリックを使用することができますが、それ以外は私が本当に答えはいいとは限りません。あなたが望むものを返す3整数スライスはありません。

+0

'numpy.roll'は新しい配列を作成します。 OPはO(1)時間の複雑さ解決策を望んでいると思う。 – cyborg

2

あなたが求めていることを実行しているため、numpyは配列のコピーを作成し、スライスはコピーではなくビューを作成する必要があると考えています。ベンジャミンがすでに述べたように、numpy.rollをチェックしてください。

関連する問題