numpy.array 合並和分割


# 導包
import numpy as np

numpy.array 的合並

.concatenate()

  一維數組

x = np.array([1, 2, 3])   # array([1, 2, 3])
y = np.array([3, 2, 1])   # array([3, 2, 1])
np.concatenate([x, y])   # array([1, 2, 3, 3, 2, 1])
z = np.array([666, 666, 666])  # array([666, 666, 666])
np.concatenate([x, y, z]) 
"""
array([  1,   2,   3,   3,   2,   1, 666, 666, 666])
"""

  二維數組

  .concatenate((a,b,c,...),axis=0) :默認情況下,axis=0可以不寫,axis是拼接方向,拼接方向可以理解為拼接完成后數量發生變化的方向,0為橫軸,1為縱軸

    axis=0:對應列的數組進行拼接,拼接方向為橫軸,需要縱軸結構相同

    axis=1:對應行的數組進行拼接,拼接方向為縱軸,需要橫軸結構相同

A = np.array([[1, 2, 3], [4, 5, 6]]) 
"""
array([[1, 2, 3],
       [4, 5, 6]])
"""
np.concatenate([A, A])
"""
array([[1, 2, 3],
       [4, 5, 6],
       [1, 2, 3],
       [4, 5, 6]])
"""
np.concatenate([A, A], axis=1) 
"""
array([[1, 2, 3, 1, 2, 3],
       [4, 5, 6, 4, 5, 6]])
"""
np.concatenate([A, z])  # 錯誤
np.concatenate([A, z.reshape(1, -1)]) 
"""
array([[  1,   2,   3],
       [  4,   5,   6],
       [666, 666, 666]])
"""

.hstack()

  函數原型:numpy.hstack(tup) ,參數tup可以是元組,列表,或者numpy數組,陣列必須具有相同的形狀,除了對應於軸的維度(默認情況下,第一個),返回結果為numpy的數組

  等價於  numpy.concatenate(tup,axis=1)
a=[1,2,3]
b=[4,5,6]
np.hstack((a,b))  # array([1, 2, 3, 4, 5, 6])

 

a=[[1],[2],[3]]
b=[[1],[2],[3]]
c=[[1],[2],[3]]
d=[[1],[2],[3]]
np.hstack((a,b,c,d))
"""
array([[1, 1, 1, 1],
       [2, 2, 2, 2],
       [3, 3, 3, 3]])
"""

  它其實就是水平(按列順序)把數組給堆疊起來

.vstack()

  函數原型:numpy.vstack(tup)  ,參數tup可以是元組,列表,或者numpy數組,返回結果為numpy的數組

  等價於:  np.concatenate(tup,axis=0) 
a=[1,2,3]
b=[4,5,6]
np.vstack((a,b))
"""
array([[1, 2, 3],
       [4, 5, 6]])
"""

 

a=[[1],[2],[3]]
b=[[1],[2],[3]]
c=[[1],[2],[3]]
d=[[1],[2],[3]]
np.vstack((a,b,c,d))
"""
array([[1],
       [2],
       [3],
       [1],
       [2],
       [3],
       [1],
       [2],
       [3],
       [1],
       [2],
       [3]])
"""

  它是垂直(按照行順序)的把數組給堆疊起來

numpy.array 的分割

split

  split(ary, indices_or_sections, axis=0):把一個數組從左到右按順序切分 

  ary:要切分的數組 
  indices_or_sections:如果是一個整數,就用該數平均切分,如果是一個數組,為沿軸切分的位置(左閉右開) 
  axis:沿着哪個維度進行切向,默認為0,橫向切分;為1時,縱向切分

x = np.arange(10)  # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
x1, x2, x3, x4, x5 = np.split(x, [2, 4, 5, 7])
"""
x1  -->  array([0, 1])
x2  -->  array([2, 3])
x3  -->  array([4])
x4  -->  array([5, 6])
x5  -->  array([7, 8, 9])
"""

 

A = np.arange(16).reshape(4, 4) 
A1, A2 = np.split(A, [2])
"""
A1  -->  array([[0, 1, 2, 3],
            [4, 5, 6, 7]])
A2  -->  array([[ 8,  9, 10, 11],
            [12, 13, 14, 15]])
"""

A1, A2 = np.split(A, [2], axis=1)
"""
A1  -->  array([[ 0,  1],
             [ 4,  5],
            [ 8,  9],
            [12, 13]])
A2  -->  array([[ 2,  3],
       [ 6,  7],
       [10, 11],
       [14, 15]])
"""

hsplit

  通過指定要返回的相同shape的array的數量,類似於axis = 1

vsplit

  vsplit沿着垂直軸分割,類似於axis = 0

upper, lower = np.vsplit(A, [2])
"""
upper  -->  array([[0, 1, 2, 3],
               [4, 5, 6, 7]])
"""

left, right = np.hsplit(A, [2]) 
"""
left  -->  array([[ 0,  1],
       [ 4,  5],
       [ 8,  9],
       [12, 13]])
"""

 


免責聲明!

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



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