In [1]:
import numpy as np
In [2]:
#Creating sample array
arr = np.arange(0,11)
In [3]:
#Show
arr
Out[3]:
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10])
In [4]:
# 添え字を使ったアクセス
arr[8]
Out[4]:
8
In [5]:
# 1から5の手前まで。
arr[1:5]
Out[5]:
array([1, 2, 3, 4])
In [6]:
# 0から5の手前まで
arr[0:5]
Out[6]:
array([0, 1, 2, 3, 4])
In [8]:
# スライスは参照が返ってくるので、同時に導入出来ます。
arr[0:5]=100

#Show
arr
Out[8]:
array([100, 100, 100, 100, 100,   5,   6,   7,   8,   9,  10])
In [9]:
# ちょっとリセットしておきましょう。
arr = np.arange(0,11)

arr
Out[9]:
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10])
In [10]:
# 6の手前までのスライス
slice_of_arr = arr[0:6]

slice_of_arr
Out[10]:
array([0, 1, 2, 3, 4, 5])
In [11]:
# スライスを変更(すべての要素)
slice_of_arr[:]=99
slice_of_arr
Out[11]:
array([99, 99, 99, 99, 99, 99])
In [13]:
# 最初のアレイを見てみましょう。
arr

# コピーはされてないんです。
Out[13]:
array([99, 99, 99, 99, 99, 99,  6,  7,  8,  9, 10])
In [15]:
# では、データ自体をコピーするにはどうしたらよいでしょうか?
arr_copy = arr.copy()

arr_copy
Out[15]:
array([99, 99, 99, 99, 99, 99,  6,  7,  8,  9, 10])
In [17]:
# 2次元アレイの添え字
arr_2d = np.array(([5,10,15],[20,25,30],[35,40,45]))

arr_2d
Out[17]:
array([[ 5, 10, 15],
       [20, 25, 30],
       [35, 40, 45]])
In [18]:
# 行を取り出す。
arr_2d[1]
Out[18]:
array([20, 25, 30])
In [19]:
arr_2d[0]
Out[19]:
array([ 5, 10, 15])
In [20]:
# 個別の要素にアクセスするには、arr_2d[row][col] or arr_2d[row,col]
# たとえば、こんな感じ
arr_2d[1][0]
Out[20]:
20
In [21]:
# 別の書き方もあります。
arr_2d[1,0]
Out[21]:
20
In [22]:
arr_2d
Out[22]:
array([[ 5, 10, 15],
       [20, 25, 30],
       [35, 40, 45]])
In [23]:
# 2次元アレイのスライス
#右上の2x2アレイ
arr_2d[:2,1:]
Out[23]:
array([[10, 15],
       [25, 30]])
In [24]:
# 最後の行
arr_2d[2]
Out[24]:
array([35, 40, 45])
In [47]:
#Shape bottom row
arr_2d[2,:]
Out[47]:
array([35, 40, 45])
In [29]:
# 便利な添え字操作を体験

# 10x10のアレイを用意
arr2d = np.zeros((10,10))
In [26]:
arr2d
Out[26]:
array([[ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.]])
In [27]:
#アレイの長さ
arr_length = arr2d.shape[1]
In [30]:
for i in range(arr_length):
    arr2d[i] = i
    
arr2d
Out[30]:
array([[ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.],
       [ 2.,  2.,  2.,  2.,  2.,  2.,  2.,  2.,  2.,  2.],
       [ 3.,  3.,  3.,  3.,  3.,  3.,  3.,  3.,  3.,  3.],
       [ 4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.],
       [ 5.,  5.,  5.,  5.,  5.,  5.,  5.,  5.,  5.,  5.],
       [ 6.,  6.,  6.,  6.,  6.,  6.,  6.,  6.,  6.,  6.],
       [ 7.,  7.,  7.,  7.,  7.,  7.,  7.,  7.,  7.,  7.],
       [ 8.,  8.,  8.,  8.,  8.,  8.,  8.,  8.,  8.,  8.],
       [ 9.,  9.,  9.,  9.,  9.,  9.,  9.,  9.,  9.,  9.]])
In [32]:
# 偶数行だけを取り出す便利な添え字
arr2d[[2,4,6,8]]
Out[32]:
array([[ 2.,  2.,  2.,  2.,  2.,  2.,  2.,  2.,  2.,  2.],
       [ 4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.],
       [ 6.,  6.,  6.,  6.,  6.,  6.,  6.,  6.,  6.,  6.],
       [ 8.,  8.,  8.,  8.,  8.,  8.,  8.,  8.,  8.,  8.]])
In [33]:
# 順番を変えることも可能です。
arr2d[[6,4,2,7]]
Out[33]:
array([[ 6.,  6.,  6.,  6.,  6.,  6.,  6.,  6.,  6.,  6.],
       [ 4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.],
       [ 2.,  2.,  2.,  2.,  2.,  2.,  2.,  2.,  2.,  2.],
       [ 7.,  7.,  7.,  7.,  7.,  7.,  7.,  7.,  7.,  7.]])