スライシング

Sample

# coding:utf-8
import numpy as np

# 0から10までの配列
x = np.arange(10)
# => [ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9]

# 全部の値
print x[:]
# 全部の値を逆順で取得する
print x[::-1]
# 4番目以降の値を取得する
print x[4:]
# 7番目までの値を取得する
print x[:7]
# 4番目から7番目までの値を取得する
print x[4:7]
# 1番目から8番目までの値を1つ飛ばしで取得する
print x[1:8:2]
# 8番目から1番目までの値を逆順で取得する
print x[8:1:-1]
# 8番目から1番目までの値を逆順でかつ一つ飛ばしで取得する
#パイプラインのようにx[8:1:-1]で得た配列を次に[::2]で一つ飛ばしで取得する、という見方
print (x[8:1:-1][::2])
# さらに一つ飛ばしして取得する
print (x[8:1:-1][::2][::2])
# 行列(多次元配列)に関しても同様
# 0から16までの4x4行列
# => [[ 0,  1,  2,  3],
#     [ 4,  5,  6,  7],
#     [ 8,  9, 10, 11],
#     [12, 13, 14, 15]]
y = np.arange(16).reshape((4,4))

# 全部の値
print y[:]
# 2行3列の要素
print y[2,3]
# 以下も同様
print y[2][3]
# 2行目
print y[2]
# 3列目
print y[:,3]
# 縦ベクトルとして1行目を取り出す
print y[:,:1]
# 縦ベクトルとして2行目を取り出す
print y[:,1:2]
# 2行目を縦ベクトルとして取り出す(後の次元数の増加の記事を参照)
print(y[2][:,np.newaxis])

出力結果

[0 1 2 3 4 5 6 7 8 9]
[9 8 7 6 5 4 3 2 1 0]
[4 5 6 7 8 9]
[0 1 2 3 4 5 6]
[4 5 6]
[1 3 5 7]
[8 7 6 5 4 3 2]
[8 6 4 2]
[8 4]
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
11
11
[ 8  9 10 11]
[ 3  7 11 15]
[[ 0]
 [ 4]
 [ 8]
 [12]]
[[ 1]
 [ 5]
 [ 9]
 [13]]
 [[ 8]
 [ 9]
 [10]
 [11]]