ndarray的拼接、分割及淺拷貝、深拷貝


  • ndarray拼接concatenate()、分割split()、array_split()
    • concatenate( ([], [], ...), axis=n )
    • split( 數組,切割點,axis=n ), 其中切割點可以多處,split必須平均長度切割
    • array_split( 數組,切割點,axis=n ),其中切割點可以多處,無需平均長度
# 拼接、分割array數組
def example1(): # 新建兩個二維 1*3 的數組
    arr1 = np.array([[1, 3, 2]]) arr2 = np.array([[6, 6, 6]]) # concatenate((array1, array2, ...), axis=n)
    # 合並array數組可合並多個 axis:合並的維度方向
    # [ [1 3 2 6 6 6]
    print(np.concatenate((arr1, arr2), axis=1)) # [ [1 3 2]
    # [6 6 6] ]
    print(np.concatenate((arr1, arr2), axis=0)) # arr3 = np.array([
    # [1, 3, 2],
    # [6, 6, 6]
    # ])
    arr3 = np.concatenate((arr1, arr2), axis=0) # split(數組, 分割數量, 軸方向),分割等長數組
    # [array([[1, 3, 2]]), array([[6, 6, 6]])]
    print(np.split(arr3, 2, axis=0)) # 在索引1、2處分別切一刀分割,分割成三部分,第0列,第1列,第2列
    # [ array([[1],[6]]),
    # array([[3],[6]]),
    # array([[2],[6]]) ]
    print(np.split(arr3, [1, 2], axis=1)) # split(數組, 分割數量, 軸方向),可分割等長與不等長數組
    # [ array([[1, 3],[6, 6]]),
    # array([[2],[6]]) ]
    print(np.array_split(arr3, 2, axis=1))

 

  • 淺拷貝、深拷貝
    • 淺拷貝,指向同一個地址,共用相同空間,  arr1 --> 空間 <-- arr2
    • 深拷貝,指向不同地址,使用不同空間, arr1 --> 空間1  空間2 <-- arr2
# 淺拷貝、深拷貝
def example2(): arr1 = np.array([ [1, 2, 3], [4, 5, 6] ]) # 淺拷貝 arr1 --> 空間 <-- arr2
    # arr1、arr2指向同一個地址的內容
    arr2 = arr1 # 改變arr2時候,arr1的內容也改變,是同一個內容
    arr2[0][1] = 9
    # arr1: [[1 9 3] arr2: [[1 9 3]
    # [4 5 6]] [4 5 6]]
    # True
    print("arr1 is arr2:", arr1 is arr2) # 深拷貝 arr1 --> 空間1 空間2 <-- arr2
    # arr1、arr3指向地址不同,僅僅元素內容相同
    arr3 = arr1.copy() # 改變arr3時候,arr1的內容不改變,不是同一個內容
    arr3[0][0] = 10
    # arr1: [[1 9 3] arr3: [[10 9 3]
    # [4 5 6]] [4 5 6]]
    # False
    print("arr1 is arr3:", arr1 is arr3)

 


免責聲明!

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



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