NumPy

NumPy Quickstart チュートリアルに取り組む (2-1) 形状の操作 配列の形状を変更する

配列は、各軸に沿った要素数で与えられた形状をする。

import numpy as np
rg = np.random.default_rng(1) 
a = np.floor(10*rg.random((3,4)))
print(a)
'''
[[5. 9. 1. 9.]
 [3. 4. 8. 4.]
 [5. 0. 7. 5.]]
'''
print(a.shape)  # (3, 4)

配列の形状は様々なコマンドで変更することができる。以下の3つのコマンドはすべて変更された配列を返すが、元の配列は変更されない。

# ravel() で得られる配列の要素の順序は、通常は "C-style" (a[0,0] の後の要素は a[0,1] )
# 配列が他の形状にリシェイプされた場合、再び配列は "C-style "で扱われる
print(a.ravel())  # [5. 9. 1. 9. 3. 4. 8. 4. 5. 0. 7. 5.]

# reshape 関数は変更された形状で引数を返す
print(a.reshape(6,2))
'''
[[5. 9.]
 [1. 9.]
 [3. 4.]
 [8. 4.]
 [5. 0.]
 [7. 5.]]
'''
print(a.T)
'''
[[5. 3. 5.]
 [9. 4. 0.]
 [1. 8. 7.]
 [9. 4. 5.]]
'''
print(a.T.shape)  # (4, 3)
print(a.shape)  # (3, 4)

# ndarray.resize メソッドは配列自体を変更する
print(a)
'''
[[5. 9. 1. 9.]
 [3. 4. 8. 4.]
 [5. 0. 7. 5.]]
'''
a.resize((2,6))
print(a)
'''
[[5. 9. 1. 9. 3. 4.]
 [8. 4. 5. 0. 7. 5.]]
'''
# リシェーピング操作で寸法が-1として与えられると、他の寸法が自動的に計算される
print(a.reshape(3,-1))
'''
[[5. 9. 1. 9.]
 [3. 4. 8. 4.]
 [5. 0. 7. 5.]]
'''