NumPy

NumPy Quickstart チュートリアルに取り組む (2-2) 形状の操作 異なる配列を積み重ねる

vstack, hstack

# 複数の配列を異なる軸に沿って積み重ねることができる
import numpy as np
rg = np.random.default_rng(1) 
a = np.floor(10*rg.random((2,2)))
print(a)
'''
[[ 5. 9. ]
 [ 1. 9. ]]
'''

b = np.floor(10*rg.random((2,2)))
print(b)
'''
[[ 3. 4. ]
 [ 8. 4. ]]
'''

print(np.vstack((a,b)))
'''
[[ 5. 9. ]
 [ 1. 9. ]
 [ 3. 4. ]
 [ 8. 4. ]]
'''

print(np.hstack((a,b)))
'''
[[ 5. 9. 3. 4. ]
 [ 1. 9. 8. 4. ]]
'''

column_stack

# 関数 column_stack は1 次元配列を列として 2 次元配列にスタックする
# これは2次元配列に対してのみhstackと同等

from numpy import newaxis
print(np.column_stack((a,b)))
'''
[[ 5. 9. 3. 4. ]
 [ 1. 9. 8. 4. ]]
'''

a = np.array([4.,2.])
b = np.array([3.,8.])
print(np.column_stack((a,b)))
'''
[[4. 3.]
 [2. 8.]]
'''

print(np.hstack((a,b)))  # [ 4. 2. 3. 8. ]

print(a[:,newaxis])
'''
[[ 4. ]
 [ 2. ]]
'''

print(np.column_stack((a[:,newaxis],b[:,newaxis])))
'''
[[ 4. 3. ]
 [ 2. 8. ]]
'''

print(np.hstack((a[:,newaxis],b[:,newaxis])))
'''
[[ 4. 3. ]
 [ 2. 8. ]]
'''

# 関数 row_stack はどのような入力配列に対しても vstack と同等
print(np.column_stack is np.hstack)  # False
print(np.row_stack is np.vstack)  # True

# 一般的に2次元以上の配列の場合、hstackは2番目の軸に沿ってスタック、vstackは1番目の軸に沿ってスタックする
# concatenateは、連結が行われるべき軸の数を与えるオプションの引数を許可suru

# Note
# 複雑なケースでは、r_とc_は、1つの軸に沿って数値を積み重ねて配列を作成するのに便利
# これらは、範囲リテラル(":")を使用できる
print(np.r_[1:4,0,4])  # [ 1 2 3 0 4 ]

# 引数として配列と一緒に使用する場合、
# r_とc_はデフォルトの動作ではvstackとhstackに似ているが、
# 連結する軸の数を与えるオプションがある