web-dev-qa-db-ja.com

配列から特定の範囲のインデックスを選択したい

Numpy配列があり、インデックス番号に基づいていくつかの値を選択します。 Python3.6を使用しています

例えば:

np.array:
index#
[0]
[1]  + + + + + + + + + +         + + + + + + + + + +
[2]  + I want to selct +         + I don't want to select:
[3]  + the indexs:     +         +                  [0]
[4]  +      [2]        +         +                  [10]
[5]  +      [4]        +         +       Or any between
[6]  +      [6]        +         + 
[7]  +      [8]        +         + + + + + + + + + +
[8]  + + + + + + + + + +
[9]
[10]

上記の例でわかるように、インデックス番号を選択します。

if x = 2, 4, 8

これは、xに数字を指定するだけで機能しますが、x変数を作成したい場合は、たとえば次のようにしました。

if x:
for i in np.arange(x+2, x-last_index_number, x+2):
return whatever 

ここで、x + 2 =最初に必要なインデックス(開始点)。 x-last_index_number =必要な最後のインデックス(最後のポイント)。 x + 2 =ステップ(xに2を追加するなどして次のインデックス番号に移動したいが、これは機能しなかった。

だから私の質問は、特定の順序で選択する番号を指定できますか?

[5][10][15][20][25][30][35]
or
[4][8][12][16][20]
5
azeez

Numpyスライスを使用すると、インデックスのリストを配列に入力できるため、必要な正確な値にスライスできます。

例えば:

    import numpy as np
    a = np.random.randn(10)
    a[[2,4,6,8]]

これにより、2番目、4番目、6番目、および8番目の配列要素が返されます(pythonインデックスは0から始まることに注意してください)。リストにこれらの要素を入力し、そのリストを配列に入力するだけで、必要な要素を取得できます。例:

    idx = list(range(2,10,2))
    a[idx]

これも、目的の要素(インデックス2,4,6,8)を返します。

3
enumaris

あなたのxは長さ20の配列です

x = np.arange(0,20)

戻り値

x [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]

配列xの最初の2つのインデックスと最後の2つのインデックスを無視して、すべてのnth(ここでは偶数のインデックス)要素にアクセスします。

print(x[2:len(x)-1:2])

戻り値

[2 4 6 8]

同様に、残りの部分については、

print(x[5:len(x)-1:5])
print(x[4:len(x)-1:4])

戻り値

[ 5 10 15]
[ 4  8 12 16]
2
sarannns