reshape()の考え方
a.reshape(d1, ..., dn)
として変形する場合
- n次元の配列になる
d1 + ... + dn = a.size
でなければならない
要素が1つの場合
ndarrayの引数に1つの数値を指定するとndarrayクラスだが数値のように表示される。
1 2 3 4 5 6 7 8 9 10 11 12 |
import numpy as np a = np.array(1) print(a) print(type(a)) print(a.size) print(a * 2) # 1 # <class 'numpy.ndarray'> # 1 # 2 |
これをreshape(1)
とすると、1要素の1次元配列になる。
1 2 3 4 |
b = a.reshape(1) print(b) # [1] |
reshape(1, 1)
とすると、1要素の2次元配列になる。reshape(1, 1, 1)
なら3次元配列。
1 2 3 4 5 6 7 8 |
c = a.reshape(1, 1) print(c) d = a.reshape(1, 1, 1) print(d) # [[1]] # [[[1]]] |
2次元化、3次元化された配列をreshape(1)
とすると、1要素の1次元配列になる。
1 2 3 4 5 |
print(c.reshape(1)) print(d.reshape(1)) # [1] # [1] |
1次元配列の変形
2次元1行の配列への変形
1次元配列をreshape(1, -1)
とすると、その配列を要素とする2次元1行の配列になる。
1 2 3 4 5 6 7 8 9 10 |
import numpy as np a = np.arange(4) print(a) b = a.reshape(1, -1) print(b) # [0 1 2 3] # [[0 1 2 3]] |
2次元1列の配列への変形
1次元配列をreshape(-1, 1)
とすると、その配列を要素とする2次元1列の配列となる。
1 2 3 4 5 6 7 |
c = a.reshape(-1, 1) print(c) # [[0] # [1] # [2] # [3]] |
任意の次元の配列への変形
1次元配列をreshape(m, n)
とすると、m行n列の2次元配列になる。m×nが配列のサイズと等しくないとエラーになる(いずれかを−1として自動設定させることは可能)。
1 2 3 4 5 |
d = a.reshape(2, 2) print(d) # [[0 1] # [2 3]] |
3次元以上の配列へも変形可能。
1 2 3 4 5 6 7 8 9 10 |
e = np.arange(12) print(e) print(e.reshape(2, 2, 3)) # [ 0 1 2 3 4 5 6 7 8 9 10 11] # [[[ 0 1 2] # [ 3 4 5]] # # [[ 6 7 8] # [ 9 10 11]]] |
1次元配列への変換
任意の形状の配列a
についてreshape(a.size)
とすることで、1次元の配列に変換できる。
1 2 3 4 5 6 7 8 9 |
print(b.reshape(b.size)) print(c.reshape(c.size)) print(d.reshape(d.size)) print(e.reshape(e.size)) # [0 1 2 3] # [0 1 2 3] # [0 1 2 3] # [ 0 1 2 3 4 5 6 7 8 9 10 11] |