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)