2016-04-06 13 views
2

私はscipy.ndimage.labelとscipy.ndimage.find_objectsを使ってイメージ内のものを探しています。スライスの配列を返します。私はスライスからオブジェクトの座標を取得しようとしていますが、スライスオブジェクトの内部に入る方法を見つけることができないようです。Pythonでスライスオブジェクトの要素にアクセスするにはどうすればいいですか?

a = 1 
b = 2 
c = 13 
d = 47 
j = slice(a,b,None) 
k = slice(c,d,None) 
x = (j, k) 

print(x) 
print(x[0]) 
print(x[0].indices(2)) 
print(x[1].indices(2)) 

出力は次のとおりです:ここでは簡単な例である。基本的

(slice(1, 2, None), slice(13, 47, None)) 
slice(1, 2, None) 
(1, 2, 1) 
(2, 2, 1) 

私は与えられていた場合、私は、B、CおよびDの値を取得する機能を探していますがスライスタプルx。私は指数が途中で私を得るだろうと思ったが、私はそれが行動であると理解していない。

答えて

3

startstopstepのプロパティをお探しですか?

>>> s = slice(1, 2, 3) 
>>> s.start 
1 
>>> s.stop 
2 
>>> s.step 
3 

slice.indices入力長と反復可能のためにアクセスされるインデックスの開始/停止/ステップを計算します。したがって、

>>> s = slice(-1, None, None) 
>>> s.indices(30) 
(29, 30, 1) 

つまり、イテラブルからアイテム29を受け取ることになります。便利xrange(またはrange)と組み合わせることができます:具体的な例として

for item in range(*some_slice.indices(len(sequence))): 
    print(sequence[item]) 

>>> a = range(30) 
>>> for i in a[-2:]: 
... print(i) 
... 
28 
29 
>>> s = slice(-2, None, None) 
>>> for ix in range(*s.indices(len(a))): 
... print(a[ix]) 
... 
28 
29 
+0

はい、それは、停止し、私が探していたステップ属性開始しました。親切にありがとう!用語が非常に一般的な場合(スライスなど)、Google-fuは失敗します。 – DaveH

+0

@DaveH - Googleがあなたに失敗したときは、いつも組み込みの 'help':' help(slice) 'を試すことができます。それは少なくともデータ記述子 'start'、' stop'、 'step'をリストしています... – mgilson

+0

大きなnumpy.arrayに(スライスオブジェクトを含む)スライスを変換する方法はありますか? – trblnc