Python Numpy数据分析中常用方法

来源:互联网 发布:新速特软件官网 编辑:程序博客网 时间:2024/06/02 08:16

一、多维的表示

Numpy用列表表示多维矩阵:
一维,维数大小为4:
[ & & & &]
二维,维数大小为3:
& = [ @ @ @ ]
上述二者添加变成:
[ [ @ @ @ ] [ @ @ @ ] [ @ @ @ ] [ @ @ @ ]]

三维列表如下:>>>  b = numpy.arange(24).reshape(2,3,4)>>>print b[[[ 0  1  2  3]  [ 4  5  6  7]  [ 8  9 10 11]] [[12 13 14 15]  [16 17 18 19]  [20 21 22 23]]]>>> b[1,2,1]21

通过索引查值可以理解为:从外往里找,
索引为1找到值:

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

索引为2找到值:

 [20 21 22 23]

索引为1找到值:

 21

二、生成数组

基本数据类型:
bool 用一个字节存储的布尔类型(True或False)
inti 由所在平台决定其大小的整数(一般为int32或int64)
int8  一个字节大小,-128 至 127
int16  整数,-32768 至 32767
int32   整数,-2 ^31 至 2 ^31 -1
int64  整数,-2 ^ 63 至 2 ^ 63 - 1
uint8  无符号整数,0 至 255
uint16   无符号整数,0 至 65535
uint32  无符号整数,0 至 2^ 32 - 1
uint64   无符号整数,0 至 2 ^ 64 - 1
float16  半精度浮点数:16位,正负号1位,指数5位,精度10位
float32   单精度浮点数:32位,正负号1位,指数8位,精度23位
float64或float  双精度浮点数:64位,正负号1位,指数11位,精度52位
complex64  复数,分别用两个32位浮点数表示实部和虚部
complex128或complex   复数,分别用两个64位浮点数表示实部和虚部

array方法:

通过列表:>>> print numpy.array([[1,2],[3,4]], dtype=int16)   //显示定义数组元素类型[[1 2] [3 4]]通过元组>>> print numpy.array((1.0,2,3,4))[ 1.0  2.   3.   4. ]

arrange方法:

>>> print numpy.arange(11)[ 0  1  2  3  4  5  6  7  8  9 10]

linspace方法(1-3分成9份):

>>> print numpy.linspace(1,3,9)[ 1.    1.25  1.5   1.75  2.    2.25  2.5   2.75  3.  ]

zeros(0),ones(1),eye(对角):

>>> print numpy.zeros((3,4))[[ 0.  0.  0.  0.] [ 0.  0.  0.  0.] [ 0.  0.  0.  0.]]>>> print numpy.ones((3,4))[[ 1.  1.  1.  1.] [ 1.  1.  1.  1.] [ 1.  1.  1.  1.]]>>> print numpy.eye(3)[[ 1.  0.  0.] [ 0.  1.  0.] [ 0.  0.  1.]]

三、数组属性

>>> a = numpy.ones((3,4))>>> print a.ndim   #维数2>>> print a.shape  #每一维的大小(3, 4)>>> print a.size   #元素数12>>> print a.dtype  #元素类型float64>>> print a.itemsize  #每个元素所占的字节数8

四、数组索引,切片

索引:

>>>  b = numpy.arange(24).reshape(2,3,4)>>>print b[[[ 0  1  2  3]  [ 4  5  6  7]  [ 8  9 10 11]] [[12 13 14 15]  [16 17 18 19]  [20 21 22 23]]]>>> b[1,2,1]21

切片:

>>> b = numpy.arange(12).reshape(4,3) >>> print b      [[ 0  1  2]      [ 3  4  5]      [ 6  7  8]      [ 9 10 11]] 

五、运算

+-*/
运算符+-*/都是对每个元素进行计算

>>> print a[[ 1.  1.] [ 1.  1.]]>>> print b[[ 1.  0.] [ 0.  1.]]>>> print a+b[[ 2.  1.] [ 1.  2.]]>>> print a-b[[ 0.  1.] [ 1.  0.]]>>> print b*2[[ 2.  0.] [ 0.  2.]]>>> print (a*2)*(b*2)[[ 4.  0.] [ 0.  4.]]>>> print b/(a*2)[[ 0.5  0. ] [ 0.   0.5]]>>> print (a*2)**4[[ 16.  16.] [ 16.  16.]]

其他方法

>>> a = numpy.ones((3,4))>>> a.sum()12>>> a.sum(axis=0)   #计算每一列的和array([ 4,  4, 4])>>> a.min()1>>> a.max()1
#关于参数axis的含义:首先我们将三维数组想象成许多二维数组平面添加而成。可按倒序记忆:三维最后添加深度0,倒数第二添加列1,第一形成行2。则>>> print(X)[[[5 2]  [4 2]] [[1 3]  [2 3]] [[1 1]  [0 1]]]>>> X.sum(axis=0)       //全部平面上的对应位置array([[7, 6],       [6, 6]])>>> X.sum(axis=1)      //每一个平面的每一列array([[9, 4],       [3, 6],       [1, 2]])>>> X.sum(axis=2)       //每一个平面的每一行array([[7, 6],       [4, 5],       [2, 1]])>>> print a[[0 1 2] [3 4 5] [6 7 8]]>>> a.sum(axis=0)    //列array([ 9, 12, 15])>>> a.sum(axis=1)    //行array([ 3, 12, 21])
>>> print a[[ 1.  1.] [ 1.  1.]]>>> numpy.sin(a)array([[ 0.84147098,  0.84147098],       [ 0.84147098,  0.84147098]])>>> numpy.floor(a)array([[ 1.,  1.],       [ 1.,  1.]])>>> numpy.exp(a)array([[ 2.71828183,  2.71828183],       [ 2.71828183,  2.71828183]])

如果数组太长,Numpy默认只打印两端数据,可设置set_printoptions(threshold=’nan’) 强制打印

六、合并

属于深拷贝

>>> a = numpy.ones((2,2))>>> b = numpy.eye(2)//垂直组合>>> print np.vstack((a,b))    //与row_stack()行组合类似[[ 1.  1.] [ 1.  1.] [ 1.  0.] [ 0.  1.]]//水平组合>>> print numpy.hstack((a,b))      //与column_stack()行组合类似[[ 1.  1.  1.  0.] [ 1.  1.  0.  1.]]//深度组合>>> print a[[0 1 2] [3 4 5] [6 7 8]]>>> b = a*2>>> print b[[ 0  2  4] [ 6  8 10] [12 14 16]]>>> print numpy.dstack((a,b))    //a与b在相同位置的元素进行组合[[[ 0  0]  [ 1  2]  [ 2  4]] [[ 3  6]  [ 4  8]  [ 5 10]] [[ 6 12]  [ 7 14]  [ 8 16]]]
>>> a = numpy.ones((1,1))>>> b = a         #浅拷贝,作为函数参数时属于浅拷贝>>> b is aTrue>>> c = a.copy()  #深拷贝>>> c is aFalse

七、分割

垂直和水平分割:

>>> print a[[0 1 2] [3 4 5] [6 7 8]]>>> numpy.hsplit(a,3)[array([[0],       [3],       [6]]), array([[1],       [4],       [7]]), array([[2],       [5],       [8]])]>>> print numpy.hsplit(a,3)[array([[0],       [3],       [6]]), array([[1],       [4],       [7]]), array([[2],       [5],       [8]])]>>> print a[[0 1 2] [3 4 5] [6 7 8]]>>> numpy.hsplit(a,3)[array([[0],       [3],       [6]]), array([[1],       [4],       [7]]), array([[2],       [5],       [8]])]>>> numpy.vsplit(a,3)[array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7, 8]])]

深度分割:

>>> a = numpy.arange(27).reshape(3,3,3)>>> print a[[[ 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]]]>>> numpy.dsplit(a,3)[array([[[ 0],        [ 3],        [ 6]],       [[ 9],        [12],        [15]],       [[18],        [21],        [24]]]), array([[[ 1],        [ 4],        [ 7]],       [[10],        [13],        [16]],       [[19],        [22],        [25]]]), array([[[ 2],        [ 5],        [ 8]],       [[11],        [14],        [17]],       [[20],        [23],        [26]]])]   

八、矩阵算法

>>> print a[[1 0] [2 3]]>>> numpy.dot(a,a)   #运用矩阵乘法,对于一位数组做的是内积运算array([[ 1,  0],       [ 8,  9]])>>> print a.transpose()  #运用矩阵转置[[1 2] [0 3]]>>> print numpy.trace(a)   #运用矩阵的迹4

九、其他

numpy.where函数是三元表达式x if condition else y的矢量化版本

plt.plot(xx, np.where(xx < 1, 1 - xx, 0), 'g-',label="Hinge loss")# if xx<1 则1-xx否则0
0 0