Python numpy関数で混同されやすいstack(),vstack(),hstack(),dstack()およびconcatenate()の簡単な解析

1765 ワード

stack()指定した軸上に大量の配列を積み重ねます
>>> arrays = [np.random.randn(3, 4) for _ in range(10)]  
>>> np.stack(arrays, axis=0).shape  
(10, 3, 4)  
  
>>>  
  
>>> np.stack(arrays, axis=1).shape  
(3, 10, 4)  
  
>>>  
  
>>> np.stack(arrays, axis=2).shape  
(3, 4, 10)  
  
>>>  
  
>>> a = np.array([1, 2, 3])  
>>> b = np.array([2, 3, 4])  
>>> np.stack((a, b))  
array([[1, 2, 3],  
       [2, 3, 4]])  
  
>>>  
  
>>> np.stack((a, b), axis=-1)  
array([[1, 2],  
       [2, 3],  
       [3, 4]])  

hstack()horizontally水平方向にスタック
>>> a = np.array((1,2,3))  
>>> b = np.array((2,3,4))  
>>> np.hstack((a,b))  
array([1, 2, 3, 2, 3, 4])  
>>> a = np.array([[1],[2],[3]])  
>>> b = np.array([[2],[3],[4]])  
>>> np.hstack((a,b))  
array([[1, 2],  
       [2, 3],  
       [3, 4]])  

vstack()vertical垂直方向にスタック
>>> a = np.array([[1], [2], [3]])  
>>> b = np.array([[2], [3], [4]])  
>>> np.vstack((a,b))  
array([[1],  
       [2],  
       [3],  
       [2],  
       [3],  
       [4]])  

dstack()depth深さ方向にスタック
>>> a = np.array((1,2,3))  
>>> b = np.array((2,3,4))  
>>> np.dstack((a,b))  
array([[[1, 2],  
        [2, 3],  
        [3, 4]]])  
  
>>>  
  
>>> a = np.array([[1],[2],[3]])  
>>> b = np.array([[2],[3],[4]])  
>>> np.dstack((a,b))  
array([[[1, 2]],  
       [[2, 3]],  
       [[3, 4]]]) 

concatenate()指定した軸上に少量の配列のスタックを行う
np.concatenate(tup,axis=i)i=0,1,2の場合はそれぞれhstack,vstack,dstackに対応