您的位置:首页 > 编程语言 > Python开发

Python数据分析学习笔记三

2016-04-27 13:16 357 查看

NumPy初识(3)

5、数组分割:

跟数组组合一样,数组也可以进行分割,可以进行水平分割、垂直分割和深度分割,会用到hsplit、vsplit、dsplit以及split等,可以将数组分割成为相同大小的子数组,也可以进行指定位置的分割


水平分割(hsplit):

所谓数组分割,如果将数组比喻为一整块蛋糕的话,那么就是拿一把刀将蛋糕分割成为几部分,而水平分割中的水平,不是指的是下刀的方向,而是两刀之间的方向是水平的,也就是将数组按照列进行分割,例:

import numpy as np

a = np.arange(12).reshape(3,4)
print np.hsplit(a,4)


输出结果:

[
array([[0],[4],[8]]),
array([[1],[5],[9]]),
array([[ 2],[ 6],[10]]),
array([[ 3],[ 7],[11]])
]


对于三行四列的数组,按照水平分割,会将各列的数值取出做成一个数组,最终得到四个有3个长度的数组;

对于同一个数组,调用split函数并且指定axis=1,也可以做到与水平分割一致的效果。

垂直分割(vsplit):

对于垂直分割,与水平分割恰恰相反,还是按照之前蛋糕的例子,所谓垂直分割,也是指的两次下刀之间的方向按照垂直的方向,显然我们在分蛋糕的时候不能这么做,否则很容易被打,还是看例子:


import numpy as np

a = np.arange(12).reshape(3,4)
print np.vsplit(a,3)


输出结果:

[
array([[0, 1, 2, 3]]),
array([[4, 5, 6, 7]]),
array([[ 8,  9, 10, 11]])
]


从结果可以很明显的看出,原本三行四列的二维数组,每一行被抽取出来做成了一个新的数组,一共得到了三个新的数组,跟原来的行数一致。

当然,同样的功能,我们还可以使用split函数实现,不过这里要设置axis=0;

深度分割(dsplit):

与深度组合一致,深度分割也是按照深度将数组进行分割,当然,首先我们要有一个三维数组:

import numpy as np
a = np.arange(36).reshape(3,3,4)
print a
print np.dsplit(a,4)


输出结果:

[[[ 0  1  2  3]
[ 4  5  6  7]
[ 8  9 10 11]]

[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]

[[24 25 26 27]
[28 29 30 31]
[32 33 34 35]]]

[
array([[[ 0],
[ 4],
[ 8]],

[[12],
[16],
[20]],

[[24],
[28],
[32]]]),
array([[[ 1],
[ 5],
[ 9]],

[[13],
[17],
[21]],

[[25],
[29],
[33]]]),
array([[[ 2],
[ 6],
[10]],

[[14],
[18],
[22]],

[[26],
[30],
[34]]]),
array([[[ 3],
[ 7],
[11]],

[[15],
[19],
[23]],

[[27],
[31],
[35]]])]


深度分割这个有一些难理解,在上例中我们创建了一个3行4列深度为3的三维数组,首先需要了解的是在reshape(3,3,4)中,第一个3代表的是数组的深度,第二个3代表的是行数,第三个4代表的是列数。然后另外需要注意的是,在dsplit函数中我们传入的是列数,这样以来就可以这样理解了:首先我们还是按照之前的惯例,沿着深度的方向进行切割,这样我们就会得到3个三行四列的二维数组,可以想成是面,然后想象将这3个二维数组摞在一起,沿着列的方向进行切割,这样我们每一次切割就会在一个面上得到了3个只有一个元素的一维数组。

在每一个面上将这个面中得到的三个一维数组放到一起,就得到了一个三行一列的二维数组,将之前得到的三个面上各自组成的二维数组组合,就得到了一个深度为3的三维数组,依此类推,我们就会得到最终的结果,4个深度为三的三维数组,每一个三维数组中有3个二维数组,每一个二维数组为三行1列。

如果实在不理解,那么可以想象成为将几片面包摞在一起进行切条。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 数据分析 numpy