split 分割
split 分割一维数组
numpy.split 函数沿特定的轴将数组分割为子数组,格式如下:
numpy.split(ary, indices_or_sections, axis)
参数说明:
ary:被分割的数组
indices_or_sections:如果是一个整数,就用该数平均切分,如果是一个数组,为沿轴切分的位置。
axis:沿着哪个维度进行切向,默认为0,纵向切分(垂直方向)。为1时,横向切分(水平方向)。
axis的值看作是x轴的值,为0时即在y轴上那么就是垂直方向,为1是在x轴上那么久是水平方向
axis=0纵向切分,即对着y轴切开;axis=1横向切分,即对着x轴切开
【注】:indices_or_sections如为整数平均切分时,原数组一定要能平均切分,如果不能将会抛异常
x=np.arange(1,9)
print(x) #[1,2,3,4,5,6,7,8]
a=np.split(x,4) #传递整数4表示平均切分为4等份
print(a) #结果:[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]
print(a[0]) #结果:[1 2]
print(a[1]) #结果:[3 4]
print(a[2]) #结果:[5 6]
print(a[3]) #结果:[7 8]
#传递数组进行分隔
#[3,5]表示将原数组按,索引0-2为一组,3-4为一组,5-末尾为一组切分
b=np.split(x,[3,5])
print(b) #结果:[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]
split 分割二维数组
#创建二维数组
a=np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
print(a)
#结果:
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
r=np.split(a,2,axis=0) #整数2表示平均切分为2等份,axis=0表示纵向切分,什么意思:即对于垂直方向来切一刀
print(r)
#结果:
[array([[1, 2, 3],[4, 5, 6]]),
array([[ 7, 8, 9],[10, 11, 12]])]
print(r[0])
#结果:
[[1 2 3]
[4 5 6]]
【注】:横向切分,这里把二维数组看作是[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]这个样子,横向切分2等份,即[1,2,3],[4,5,6]为一部分,[7,8,9],[10,11,12]为一部分
print(r[1])
#结果:
[[ 7 8 9]
[10 11 12]]
或
x,y=np.split(a,2,axis=0)
print(x)
#结果:
[[1 2 3]
[4 5 6]]
print(y)
#结果:
[[ 7 8 9]
[10 11 12]]
水平分隔
hsplit函数可以水平分隔数组,该函数有两个参数,第 1 个参数表示待分隔的数组, 第 2 个参数表示要将数组水平分隔成几个小数组
注:第2个参数值必须可以整除待分隔数组的列数,即原数组必须可以平均等分,如果不能则抛异常
a=np.arange(16).reshape([4,4])
print(a,a.shape) #创建二维数组4行4列
结果:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
(4, 4)
x,y=np.hsplit(a,2)
print(x)
结果:
[[ 0 1]
[ 4 5]
[ 8 9]
[12 13]]
print(y)
结果:
[[ 2 3]
[ 6 7]
[10 11]
[14 15]]
【注】x,y=np.hsplit(a,[2,3]) #也可以传递一个数组按位置分隔同split类似
垂直分割数组
vsplit 函数可以垂直分隔数组,该函数有两个参数,第 1 个参数表示待分隔的数组, 第 2 个参数表示将数组垂直分隔成几个小数组。
a=np.arange(16).reshape([4,4])
print(a,a.shape) #创建二维数组4行4列
结果:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
(4, 4)
x,y=np.vsplit(a,2)
print(x)
结果:
[[0 1 2 3]
[4 5 6 7]]
print(y)
结果:
[[ 8 9 10 11]
[12 13 14 15]]
【注】x,y=np.vsplit(a,[2,3]) #也可以传递一个数组按位置分隔同split类似
transpose 进行转换
transpose 进行转换
a=np.arange(1,13).reshape(2,6)
print(a)
#结果:
[[ 1 2 3 4 5 6]
[ 7 8 9 10 11 12]]
print(a.transpose()) #将原来的二维数组2行6列转换为:6行2列
#结果:
[[ 1 7]
[ 2 8]
[ 3 9]
[ 4 10]
[ 5 11]
[ 6 12]]
#二维数组也可以使用.T转置
print(a.T)
#结果:
[[ 1 7]
[ 2 8]
[ 3 9]
[ 4 10]
[ 5 11]
[ 6 12]]
#numpy中的transpose()方法转置
c=np.transpose(a)
print(c)
#结果:
[[ 1 7]
[ 2 8]
[ 3 9]
[ 4 10]
[ 5 11]
[ 6 12]]
三维数组转置
#创建三维数组2个3行4列
a=np.arange(1,25).reshape(2,3,4)
print(a)
#结果:
[[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
[[13 14 15 16]
[17 18 19 20]
[21 22 23 24]]]
#对于三维a[i][j][k]进行转置,默认的将i和k进行交换
b=np.transpose(a)
print(b,b.shape)
#结果:
[[[ 1 13]
[ 5 17]
[ 9 21]]
[[ 2 14]
[ 6 18]
[10 22]]
[[ 3 15]
[ 7 19]
[11 23]]
[[ 4 16]
[ 8 20]
[12 24]]]
(4, 3, 2)
#transpose指定维度进行转置
#三维默认的维度数是:(0,1,2)分别对应原数组的(2,3,4),所以指定维度数为(1,2,0)即对应原数组的(3,4,2)
c=np.transpose(a,(1,2,0))
print(c,c.shape)
#结果:
[[[ 1 13]
[ 2 14]
[ 3 15]
[ 4 16]]
[[ 5 17]
[ 6 18]
[ 7 19]
[ 8 20]]
[[ 9 21]
[10 22]
[11 23]
[12 24]]]
(3, 4, 2)