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)

 

posted @ 2021-01-12 16:27  a最简单  阅读(1207)  评论(0编辑  收藏  举报