一,数组组合
(一)concatenate
numpy.concatenate((a1, a2, ...), axis=0, out=None)
#参数
"""
(a1, a2, ...):数组序列(元组,列表等),除了与axis对应的维度之外,数组其他维度数值相等。
axis=0:轴向,默认 0
"""
# demo
arr1 = np.arange(9).reshape(3, -1)
arr2 = np.arange(3).reshape(1, 3)
arr3 = np.concatenate([arr1, arr2], axis=0)
print(arr3)
(二)stack
numpy.stack(arrays, axis=0, out=None)
# 沿着一个新的轴拼接数组序列
# 参数
"""
arrays:数组序列(元组,列表等),所有数组形状相同
axis:新增轴向,默认0,若axis=-1,将新增数组的下一个轴向
"""
# demo
arr1 = np.arange(6).reshape(3, -1)
arr2 = np.arange(6).reshape(3, 2)
arr3 = np.stack([arr1, arr2], axis=0)
print(arr3.shape) # (2, 3, 2) 增加0轴向,因为2个数组,所以0轴数值为2
arr4 = np.stack([arr1, arr2], axis=1)
print(arr4.shape) # (3, 2, 2) 增加1轴向,因为2个数组,所以1轴数值为2
arr5 = np.stack([arr1, arr2], axis=-1)
print(arr5.shape) # (3, 2, 2) 数组的下一轴向为2,因为2个数组,所以2轴数值为2
(三)vstack
numpy.vstack(tup)
# 按顺序垂直堆叠数组,即沿0轴堆叠
# 参数
"""
tup:数组序列(元组,列表等),除了0轴对应的维度之外,数组其他维度数值相等。
一维数组必须有相同长度
"""
# demo
arr1 = np.arange(6).reshape(3, -1)
arr2 = np.arange(6).reshape(3, 2)
arr3 = np.vstack((arr1, arr2]))
print(arr3.shape)
(四)hstack
numpy.hstack(tup)
# 按顺序水平堆叠数组,即沿1轴堆叠
# 参数
# tup:数组序列(元组,列表等),除了1轴对应的维度之外,数组其他维度数值相等。
# demo
arr1 = np.arange(6).reshape(3, -1)
arr2 = np.arange(6).reshape(3, 2)
arr3 = np.vstack((arr1, arr2))
print(arr3.shape) # (3, 4)
(五)dstack
numpy.hstack(tup)
# 按顺序深度堆叠数组,即沿2轴堆叠
# 参数
# tup:数组序列(元组,列表等),除了2轴对应的维度之外,数组其他维度数值相等。
# demo
arr1 = np.arange(6).reshape(3, -1)
arr2 = np.arange(6).reshape(3, 2)
arr3 = np.dstack((arr1, arr2))
print(arr3.shape) # (3, 2, 2)
二,数组拆分
(一)split
numpy.split(ary, indices_or_sections, axis=0)
# 将一个数组拆分为多个子数组作为视图,得到的子数组都是视图,非副本
#参数
"""
ary:拆分的数组
indices_or_sections:定义数组如何拆分
如果indices_or_sections为整数n,则数组将沿轴被分成n个相等的数组。如果无法进行这种拆分,则会报错。
如果indices_or_sections是索引序列,则数组沿轴按照索引拆分,例如
indices_or_sections=[1,3],axis=0,则数组拆分成
arr[:1]
arr[1:3]
arr[3:]
axis:拆分轴向
"""
#demo
arr = np.random.randn(6, 3)
first, second = np.split(arr, 2, axis=0)
arr = np.random.randn(6, 3)
first, second = np.split(arr, 2, axis=1)
# 沿着1轴无法均分,ValueError: array split does not result in an equal division
# 按照索引拆分
arr = np.random.randn(6, 3)
first, second, third = np.split(arr, [2, 5], axis=0)
# 按照索引拆分,如果索引超过了数组沿轴的索引范围,则相应地返回空子数组。
arr = np.random.randn(6, 3)
first, second, third = np.split(arr, [2, 6], axis=0)
(二)vsplit
numpy.vsplit(ary, indices_or_sections)
#垂直沿着0轴拆分数组
#同numpy.split(ary, indices_or_sections, axis=0)
(三)hsplit
numpy.hsplit(ary, indices_or_sections)
# 水平沿着1轴拆分数组
# 同numpy.split(ary, indices_or_sections, axis=1)
(四)dsplit
numpy.dsplit(ary, indices_or_sections)
#沿着2轴拆分数组
#同numpy.split(ary, indices_or_sections, axis=2)