Numpy|08スライスとインデックス

10085 ワード

ndarrayオブジェクトの内容は、Pythonのlistのスライス操作と同様に、インデックスまたはスライスによってアクセスおよび変更できます.
(1)ndarray配列インデックスは、0−nの下付きスケールに基づいて行うことができる.
(2)スライスオブジェクトは,内蔵のslice関数によりstart,stopおよびstepパラメータを設定して行い,元の配列から新しい配列を切り出すことができる.
 
例1:下付き注意下付き文字は0から
import numpy as np

a = np.arange(10)
print(a)
print(a[0])
print(a[2])

出力結果:
  [0 1 2 3 4 5 6 7 8 9]  0  2
 
実列2:sliceでスライス
import numpy as np

a = np.arange(10)

s1 = slice(2, 7)
print(a[s1])

s2 = slice(2, 7, 2)  #
print(a[s2])

出力結果:
  [2 3 4 5 6]  [2 4 6]
 
例3:スライスパラメータstart:stop:stepをコロンで区切ってスライス操作を行う
コロン:の説明:
[2]などのパラメータが1つしか配置されていない場合、インデックスに対応する単一の要素が返されます.
[2:]の場合、インデックスの開始以降のすべてのアイテムが抽出されることを示します.
[2:7]のような2つのパラメータが使用されている場合、インデックスの停止を含まない2つのインデックス間のアイテムが抽出されます.
import numpy as np
 
a = np.arange(10)  
b = a[2:7:2]   #     2       7   ,    2
print(b)

出力結果:
[2  4  6]

 
import numpy as np
 
a = np.arange(10)  # [0 1 2 3 4 5 6 7 8 9]
b = a[5] 
print(b)

出力結果:
5

import numpy as np
 
a = np.arange(10)
print(a[2:])

出力結果:
[2  3  4 5 6 7 8 9]

import numpy as np
 
a = np.arange(10)  # [0 1 2 3 4 5 6 7 8 9]
print(a[2:5])

出力結果:
[2  3  4]


たじゅうはいれつ
例1:多次元配列のスライスでは、カンマを使用して次元数を区別します.注:コロン区切りスライスには停止インデックスは含まれません.
import numpy as np
  
a=np.arange(0,12)
a.shape=(3,4)
print(a)
print(a[0:2,1:3])

出力結果:
[[ 0  1 2 3] [ 4 5 6 7] [ 8 9 10 11]]
[[1 2] [5 6]]

a[0:2,1:3]

コロンの左の数を横座標、右の数を縦座標、4つの座標をデカルト積とすることができ、すなわち配列aの下付きをとるのは(0,1)、(0,2)、(1,2)、(1,2)の4つの位置の数である.
 
例2
import numpy as np
 
a = np.array([[1,2,3],[3,4,5],[4,5,6]])
print(a)

#           
print('      a[1:]      ')
print(a[1:])

出力結果:
[[1 2 3] [3 4 5] [4 5 6]]
a[1:] [[3 4 5] [4 5 6]]


例3:スライスには、選択したメタグループの長さが配列の次元と同じになるように、省略記号...も含まれます.
行の場所で省略記号を使用すると、行の要素を含むndarrayが返されます.
import numpy as np

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

出力結果:
[[1 2 3] [3 4 5] [4 5 6]]
[2 4 5]
[3 4 5]
[[2 3] [4 5] [5 6]]