numpy 合並數組和切割數組


一、合並數組

可以在不同的軸上堆積數組:

>>> a = np.floor(10*np.random.random((2,2))) >>> a array([[ 8.,  8.], [ 0., 0.]]) >>> b = np.floor(10*np.random.random((2,2))) >>> b array([[ 1.,  8.], [ 0., 4.]]) >>> np.vstack((a,b)) array([[ 8.,  8.], [ 0., 0.], [ 1.,  8.], [ 0., 4.]]) >>> np.hstack((a,b)) array([[ 8.,  8.,  1.,  8.], [ 0., 0., 0., 4.]])

注意:

  • 不同於reshape方法,vstack和hstack是numpy級別的功能,不能通過數組對象來調用
  • v和h實際上就是垂直方向和水平方向,英文字母
  • 參數要以元組的方式提供

numpy還有一個concatenate方法,既可以垂直拼接也可以水平拼接,是通過axis參數進行區分,其工作機制比較難以理解和記憶,建議查看范例,對照使用:

>>> np.concatenate((a, b), axis=0)
array([[ 8.,  8.],
       [ 0.,  0.],
       [ 1.,  8.],
       [ 0.,  4.]])
>>> np.concatenate((a, b), axis=1)
array([[ 8.,  8.,  1.,  8.],
       [ 0.,  0.,  0.,  4.]])
>>>arr1 = np.array([1, 2, 3])

>>>arr2 = np.array([4, 5, 6])
>>> np.concatenate((arr1, arr2), axis=0)
array([1 2 3 4 5 6])

concatenate方法在合並的時候,兩個數組必須處在同一維度,否則會報錯。axis參數可以賦值的數值個數取決於數組的維度數。

重要提示:在numpy中,一維和多維,垂直和水平,不同的操作可能產生完全不同的結果和邏輯。最好的辦法是現用現查,或者寫個例子測試一下!

二、切割數組

使用hsplit,可以沿着數組的水平軸拆分數組,方法是指定要返回的相等形狀數組的數目,或者指定在其后面進行拆分的列:

>>> a = np.floor(10*np.random.random((2,12))) >>> a array([[ 9.,  5.,  6.,  3.,  6.,  8.,  0.,  7.,  9.,  7.,  2.,  7.], [ 1.,  4.,  9.,  2.,  2.,  1.,  0.,  6.,  2.,  2.,  4., 0.]]) >>> np.hsplit(a,3)   # 將數據均勻分割成3份
[array([[ 9.,  5.,  6.,  3.], [ 1.,  4.,  9.,  2.]]), array([[ 6.,  8.,  0.,  7.], [ 2.,  1.,  0.,  6.]]), array([[ 9.,  7.,  2.,  7.], [ 2.,  2.,  4., 0.]])] >>> np.hsplit(a,(3,4))   # 在指定的列位置,分割數組
[array([[ 9.,  5.,  6.], [ 1.,  4.,  9.]]), array([[ 3.], [ 2.]]), array([[ 6.,  8.,  0.,  7.,  9.,  7.,  2.,  7.], [ 2.,  1.,  0.,  6.,  2.,  2.,  4.,  0.]])]

顯然有vsplit方法,對數組進行垂直方向的分割;也有split方法綜合了兩個方法的功能,可以指定分割的軸。

使用方式與上面的一致。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM