import numpy as np A = np.arange(12).reshape((3, 4)) print(A) """ array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]) """ #纵向分割 print(np.split(A, 2, axis=1)) """ [array([[0, 1], [4, 5], [8, 9]]), array([[ 2, 3], [ 6, 7], [10, 11]])] """ # 横向分割 print(np.split(A, 3, axis=0)) # [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])] # 错误的分割 # # 范例的Array只有4列,只能等量对分,因此输入以上程序代码后Python就会报错。 # 可以看到split(矩阵,分割单位中元素的个数,分割方向)-》0表示的是横向,1表示的纵向 print(np.split(A, 3, axis=1)) # ValueError: array split does not result in an equal division # 为了解决这种情况, 我们会有下面这种方式. # 不等量的分割 # 在机器学习时经常会需要将数据做不等量的分割,因此解决办法为np.array_split() # 为什么机器学习的时候会做不等量的分隔?? print(np.array_split(A, 3, axis=1)) """ [array([[0, 1], [4, 5], [8, 9]]), array([[ 2], [ 6], [10]]), array([[ 3], [ 7], [11]])] 可以看到第一个为矩阵3行x2列 第二个为矩阵 3x1 第三个为矩阵 3x1 """ # 其他的分割方式 # # 在Numpy里还有np.vsplit()与横np.hsplit()方式可用。 # v表示的是vertical h表示的是horizontal print(np.vsplit(A, 3)) #等于 print(np.split(A, 3, axis=0)) # [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])] print(np.hsplit(A, 2)) #等于 print(np.split(A, 2, axis=1)) """ [array([[0, 1], [4, 5], [8, 9]]), array([[ 2, 3], [ 6, 7], [10, 11]])] """
分割的作用
在卷积神经网络中 卷积的过程就要用到array的分割,因为是一小块一小块的卷积的
np.hsplit(A, 2) 等于 np.split(A, 2, axis=1) vertical
np.vsplit(A, 3) 等于 np.split(A, 3, axis=0) horizontal