《利用python进行数据分析》——Numpy基础

时间:2022-10-20 21:27:02

一、创建数组

1、创建数组的函数

  • array:将输入数据(列表、元组、数组或其他序列类型)转换为ndarray,可用dtype指定数据类型。
>>> import numpy as np
>>> a=np.array([1,2,3])
>>> a
array([1, 2, 3])
>>> c=np.array([1,2,3],dtype=float)  #使用的type指定数据类型
>>> c
array([ 1.,  2.,  3.])
>>> c=c.astype(int) #使用astype更改数据类型
>>> c
array([1, 2, 3])
  •  arange:类似于range,但返回的不是列表而是ndarray。
>>> g=np.arange(5)     
>>> g
array([0, 1, 2, 3, 4])
>>> k=np.arange(6).reshape(2,3)
>>> k
array([[0, 1, 2],
       [3, 4, 5]])
  •  ones、ones_like:创建全是1的数组。
>>> c=np.ones((2,3),dtype=np.int)
>>> c
array([[1, 1, 1],
       [1, 1, 1]])

>>> d=np.ones_like(c)  #d的形状和dtype与c相同 >>> d
array([[1, 1, 1],
       [1, 1, 1]])
  •  zeros、zeros_like:创建全是0的数组。
>>> f=np.zeros((2,3,2))
>>> f
array([[[ 0.,  0.],
        [ 0.,  0.],
        [ 0.,  0.]],

       [[ 0.,  0.],
        [ 0.,  0.],
        [ 0.,  0.]]])

>>> g=np.zeros_like(f)  #g的形状和dtype与f相同
>>> g
array([[[ 0.,  0.],
        [ 0.,  0.],
        [ 0.,  0.]],

       [[ 0.,  0.],
        [ 0.,  0.],
        [ 0.,  0.]]])
  • empty,empty_like:创建新数组,只分配内存但不填充任何值。

注:empty数据并不是空的数组,也不是全为0的数组,它返回的是一些未初始化的垃圾值。

>>> k=np.empty((2,3))
>>> k
array([[  6.23042070e-307,   3.56043053e-307,   1.37961641e-306],
       [  8.06612192e-308,   2.22523004e-307,   2.44031977e-312]])
>>> g=np.empty_like(k) #g的形状和dtype与k相同
>>> g
array([[  6.23042070e-307,   3.56043053e-307,   1.37961641e-306],
       [  8.06612192e-308,   2.22523004e-307,   2.44031977e-312]])
  • eye、identity:创建一个正方的N*N的单位矩阵(对角线为1,其他为0)

np.eye(N, M=None, k=0, dtype=<type ‘float’>)
可以创建矩形矩阵,且k值可以调节,为1的对角线的位置偏离度,0居中,1向上偏离1,2偏离2,以此类推,-1向下偏离。值绝对值过大就偏离出去了,整个矩阵就全是0了。

>>> l=np.eye(3,4,1)  #3行4列,为1的对角线向上移一位
>>> l
array([[ 0.,  1.,  0.,  0.],
       [ 0.,  0.,  1.,  0.],
       [ 0.,  0.,  0.,  1.]])

>>> l1=np.eye(3,3,-1) #3行3列,为1的对角线向下移一位
>>> l1
array([[ 0.,  0.,  0.],
       [ 1.,  0.,  0.],
       [ 0.,  1.,  0.]])

>>> j=np.identity(3)  #创建方形单位矩阵(对角线为1,其余为0)
>>> j
array([[ 1.,  0.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  0.,  1.]])

 

2、Numpy的数据类型

《利用python进行数据分析》——Numpy基础

 

3、 查看数组维度、数组形状、数据类型

>>> a=np.random.randn(4,3)
>>> a
array([[-1.67075275, -0.53713536, -1.54479383],
       [-0.95460603,  2.097174  , -0.61332423],
       [-1.92818377, -0.00663392,  1.34561876],
       [ 0.54646619, -0.85965155, -0.70237827]])

>>> a.ndim  #查看维度
2

>>> a.shape  #查看形状
(4, 3)

>>> a.dtype  #查看数据类型
dtype('float64')

 

二、索引、切片

  • 利用行列号索引、切片
>>> a
array([[0, 1, 2],
       [3, 4, 5]])

>>> a[0]
array([0, 1, 2])

>>> a[0][2]
2

>>> a[0][1:]
array([1, 2])

>>> a[:,:1]
array([[0],
       [3]])

>>> a[:,:2]
array([[0, 1],
       [3, 4]])
  •  利用整数数组做花式索引
>>> a=np.arange(20).reshape(5,4)
>>> a
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [16, 17, 18, 19]])

>>> a[[0,2,4]]  #选取第0,2,4行元素
array([[ 0,  1,  2,  3],
       [ 8,  9, 10, 11],
       [16, 17, 18, 19]])

>>> a[[0,2,1],[1]] #意为选取(0,1),(2,1),(1,1)的元素
array([1, 9, 5])

>>> a[[0,2,1]][:,[2,0]]#意为选取0、2、1行,2,0列的元素
array([[ 2,  0],
       [10,  8],
       [ 6,  4]])
  • 条件索引
>>> a=np.random.randn(4,3)
>>> a
array([[-0.04603611, -1.04144497,  0.78488753],
       [-0.06099172,  0.31987999,  0.62553966],
       [-0.44534405, -0.33631437,  0.07821993],
       [-0.56541056, -0.42975815, -0.65669226]])

>>> a[a<0]
array([-0.04603611, -1.04144497, -0.06099172, -0.44534405, -0.33631437,
       -0.56541056, -0.42975815, -0.65669226])

>>> b=np.array(['rose','lily','tulips','hyacinth'])
>>> b==‘lily‘        #条件判断,返回布尔数组
array([False,  True, False, False], dtype=bool)

>>> a[b==‘lily’]     #用布尔数组判断,返回布尔为true的行,注行数要与布尔数组的长度相同
array([[-0.06099172,  0.31987999,  0.62553966]])


>>> c=(b=='rose')|(b=='lily') #条件或写法,不能写成or >>> c #多个条件判断 array([ True, True, False, False], dtype=bool) >>> a[c] array([[-0.04603611, -1.04144497, 0.78488753], [-0.06099172, 0.31987999, 0.62553966]])

  >>> b!='rose'    #条件非写法
  array([False,  True,  True,  True], dtype=bool)

  >>> f=(b=='rose')&(b=='lily')  #条件与写法,不能写成and
  >>> f
  array([False, False, False, False], dtype=bool)
 

 

 三、数组和标量间的运算

大小相等的数组间的算术运算会应用到元素级。

>>> a=np.arange(6).reshape(2,3)
>>> a
array([[0, 1, 2],
       [3, 4, 5]])

>>> a*a
array([[ 0,  1,  4],
       [ 9, 16, 25]])

>>> a+a
array([[ 0,  2,  4],
       [ 6,  8, 10]])
>>> a-a
array([[0, 0, 0],
       [0, 0, 0]])

>>> a/a
array([[ nan,   1.,   1.],
       [  1.,   1.,   1.]])

>>> a*2
array([[ 0,  2,  4],
       [ 6,  8, 10]])

>>> a/2
array([[ 0. ,  0.5,  1. ],
       [ 1.5,  2. ,  2.5]])

>>> a**0.5
array([[ 0.        ,  1.        ,  1.41421356],
       [ 1.73205081,  2.        ,  2.23606798]])

 

 四、数组转置和轴对换

  • T:转置
>>> a=np.arange(6).reshape(3,2)
>>> a
array([[0, 1],
       [2, 3],
       [4, 5]])

>>> a.T          #转置
array([[0, 2, 4],
       [1, 3, 5]])

 

  •  transpose:传入一个由轴编号组成的元组,对这些轴进行转置
>>> arr=np.arange(16).reshape(2,2,4)
>>> arr
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7]],

       [[ 8,  9, 10, 11],
        [12, 13, 14, 15]]])

>>> arr.transpose(0,2,1)  #transpose(行、列、层)分别用数字0,1,2代表,arr.transpose(0,2,1)意为列、层对换
array([[[ 0,  4],
        [ 1,  5],
        [ 2,  6],
        [ 3,  7]],

       [[ 8, 12],
        [ 9, 13],
        [10, 14],
        [11, 15]]])
  •  swapaxes:接受一对轴编号
>>> arr.swapaxes(1,2)    #接受一对轴编号,列、层对调
array([[[ 0,  4],
        [ 1,  5],
        [ 2,  6],
        [ 3,  7]],

       [[ 8, 12],
        [ 9, 13],
        [10, 14],
        [11, 15]]])

 

 五、函数

  • abs,fabs   :计算整数、浮点数、复数的绝对值,对于非复数,fabs更快
>>> a=np.random.randn(3,4)
>>> a
array([[ 1.38259684,  1.5849254 ,  0.4449462 ,  0.2385593 ],
       [ 1.00091383, -1.09375872, -0.02773304,  0.53630798],
       [ 0.57737587,  1.60649999, -0.20384362, -1.22109508]])
>>> np.abs(a)
array([[ 1.38259684,  1.5849254 ,  0.4449462 ,  0.2385593 ],
       [ 1.00091383,  1.09375872,  0.02773304,  0.53630798],
       [ 0.57737587,  1.60649999,  0.20384362,  1.22109508]])
>>> np.fabs(a)
array([[ 1.38259684,  1.5849254 ,  0.4449462 ,  0.2385593 ],
       [ 1.00091383,  1.09375872,  0.02773304,  0.53630798],
       [ 0.57737587,  1.60649999,  0.20384362,  1.22109508]])
  • sqrt:计算平方根
>>> b=np.arange(4).reshape(2,2)
>>> b
array([[0, 1],
       [2, 3]])

>>> np.sqrt(b)
array([[ 0.        ,  1.        ],
       [ 1.41421356,  1.73205081]])
  • square:计算平方
>>> b
array([[0, 1],
       [2, 3]])
>>> np.square(b)
array([[0, 1],
       [4, 9]], dtype=int32)
  • exp计算指数????^????
>>> np.exp(b)
array([[  1.        ,   2.71828183],
       [  7.3890561 ,  20.08553692]])
  • log、log10、log2、log1p :分布为自然对数(以e为底),底数为10的log,底数为2的log,log(1+x)
>>> c=np.arange(1,10).reshape(3,3)
>>> c
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
>>> np.log10(c)
array([[ 0.        ,  0.30103   ,  0.47712125],
       [ 0.60205999,  0.69897   ,  0.77815125],
       [ 0.84509804,  0.90308999,  0.95424251]])
  • sign:计算各元素的正负号1(正数)、0(零)、-1(负数)
>>> a
array([[ 1.38259684,  1.5849254 ,  0.4449462 ,  0.2385593 ],
       [ 1.00091383, -1.09375872, -0.02773304,  0.53630798],
       [ 0.57737587,  1.60649999, -0.20384362, -1.22109508]])
>>> np.sign(a)
array([[ 1.,  1.,  1.,  1.],
       [ 1., -1., -1.,  1.],
       [ 1.,  1., -1., -1.]])
  • ceil:返回数字的上入整数。
>>> a
array([[ 1.38259684,  1.5849254 ,  0.4449462 ,  0.2385593 ],
       [ 1.00091383, -1.09375872, -0.02773304,  0.53630798],
       [ 0.57737587,  1.60649999, -0.20384362, -1.22109508]])
>>> np.ceil(a)
array([[ 2.,  2.,  1.,  1.],
       [ 2., -1., -0.,  1.],
       [ 1.,  2., -0., -1.]])
  • floor:返回数字的下舍整数
>>> a
array([[ 1.38259684,  1.5849254 ,  0.4449462 ,  0.2385593 ],
       [ 1.00091383, -1.09375872, -0.02773304,  0.53630798],
       [ 0.57737587,  1.60649999, -0.20384362, -1.22109508]])
>>> np.floor(a)
array([[ 1.,  1.,  0.,  0.],
       [ 1., -2., -1.,  0.],
       [ 0.,  1., -1., -2.]])
  •  rint:将各元素四舍五入到最接近的整数
>>> a
array([[ 1.38259684,  1.5849254 ,  0.4449462 ,  0.2385593 ],
       [ 1.00091383, -1.09375872, -0.02773304,  0.53630798],
       [ 0.57737587,  1.60649999, -0.20384362, -1.22109508]])
>>> np.rint(a)
array([[ 1.,  2.,  0.,  0.],
       [ 1., -1., -0.,  1.],
       [ 1.,  2., -0., -1.]])
  •  modf:将数字的小数和整数部分以两个独立数组的形式返回
>>> a
array([[ 1.38259684,  1.5849254 ,  0.4449462 ,  0.2385593 ],
       [ 1.00091383, -1.09375872, -0.02773304,  0.53630798],
       [ 0.57737587,  1.60649999, -0.20384362, -1.22109508]])
>>> np.modf(a)
(array([[ 0.38259684,  0.5849254 ,  0.4449462 ,  0.2385593 ],
       [ 0.00091383, -0.09375872, -0.02773304,  0.53630798],
       [ 0.57737587,  0.60649999, -0.20384362, -0.22109508]]), array([[ 1.,  1.,  0.,  0.],
       [ 1., -1., -0.,  0.],
       [ 0.,  1., -0., -1.]]))
  •  isnan:返回一个表示是否为nan的布尔型数组
>>> a
array([[ 1.38259684,  1.5849254 ,  0.4449462 ,  0.2385593 ],
       [ 1.00091383, -1.09375872, -0.02773304,  0.53630798],
       [ 0.57737587,  1.60649999, -0.20384362, -1.22109508]])
>>> np.isnan(a)
array([[False, False, False, False],
       [False, False, False, False],
       [False, False, False, False]], dtype=bool)
  •  isfinite、isinf:分别返回一个表示‘哪些元素是有穷的(非inf 非nan)’,和‘哪些元素是无穷的’布尔型数组
>>> a
array([[ 1.38259684,  1.5849254 ,  0.4449462 ,  0.2385593 ],
       [ 1.00091383, -1.09375872, -0.02773304,  0.53630798],
       [ 0.57737587,  1.60649999, -0.20384362, -1.22109508]])
>>> np.isfinite(a)      #是否是有穷的(非空即有穷)
array([[ True,  True,  True,  True],
       [ True,  True,  True,  True],
       [ True,  True,  True,  True]], dtype=bool)
>>> np.isinf(a)         #是否是无穷
array([[False, False, False, False],
       [False, False, False, False],
       [False, False, False, False]], dtype=bool)
  •  add:将数组中对应的元素相加
>>> b=np.arange(6).reshape(3,2)
>>> b
array([[0, 1],
       [2, 3],
       [4, 5]])
>>> np.add(b,b)
array([[ 0,  2],
       [ 4,  6],
       [ 8, 10]])
  • substract:从第一个数组中减去第二个数组
>>> d=np.arange(6,0,-1).reshape(3,2)
>>> d
array([[6, 5],
       [4, 3],
       [2, 1]])
>>> np.subtract(b,d)     #b-d
array([[-6, -4],
       [-2,  0],
       [ 2,  4]])
  •  multiply:数组相乘
>>> b
array([[0, 1],
       [2, 3],
       [4, 5]])
>>> np.multiply(b,b)
array([[ 0,  1],
       [ 4,  9],
       [16, 25]])
  •  divide,floor_divide:除法、向下整除法
>>> np.divide(b,d)     #b/d
array([[ 0. ,  0.2], 
       [ 0.5,  1. ],
       [ 2. ,  5. ]])

>>> np.floor_divide(b,d)
array([[0, 0],
       [0, 1],
       [2, 5]], dtype=int32)
  •  power:计算 第一个数组^第二个数组
>>> f=np.empty((3,2))   #构建一个空数组
>>> f[:]=2     #f中元素都赋值为2
>>> f 
array([[ 2.,  2.],
       [ 2.,  2.],
       [ 2.,  2.]])
>>> np.power(b,f)      #b^f
array([[  0.,   1.],
       [  4.,   9.],
       [ 16.,  25.]])
  •  maximum,fmax:返回两个数组中的最大值,fmax忽略nan
>>> b
array([[0, 1],
       [2, 3],
       [4, 5]])
>>> d
array([[6, 5],
       [4, 3],
       [2, 1]])
>>> np.maximum(b,d)
array([[6, 5],
       [4, 3],
       [4, 5]])
  •  minimum,fmin:返回两个数组中的最小值,fmin忽略nan
>>> np.minimum(b,d)
array([[0, 1],
       [2, 3],
       [2, 1]])
  • mod:求余数
>>> np.mod(b,d)    #求b/d的余数
array([[0, 1],
       [2, 0],
       [0, 0]], dtype=int32)
>>> np.divide(b,d)
  • copysign:将第二个数组的值的符合复制给第一个数组中的值
>>> f
array([[-2., -2.],
       [ 2.,  2.],
       [ 2.,  2.]])
>>> np.copysign(b,f)    #把f的符号赋值给b
array([[-0., -1.],
       [ 2.,  3.],
       [ 4.,  5.]])
  • greater、greater_equal、less、less_equal、equal、not equal,执行比较运算(>,>=,<,<=,=,!=) ,返回布尔值
>>> b
array([[0, 1],
       [2, 3],
       [4, 5]])
>>> d
array([[6, 5],
       [4, 3],
       [2, 1]])
>>> np.equal(b,d)
array([[False, False],
       [False,  True],
       [False, False]], dtype=bool)

>>> np.greater(b,d)      #b>d
array([[False, False],
       [False, False],
       [ True,  True]], dtype=bool)
  •  logical_and,logical_or,logical_xor:执行逻辑运算(&,|,^)
>>> np.logical_and(b,d)
array([[False,  True],          
       [ True,  True],
       [ True,  True]], dtype=bool)
  •  meshgrid:接受两个一维数组A、B,生成两个二维数组
>>> points=np.arange(-5,5,1)
>>> points
array([-5, -4, -3, -2, -1,  0,  1,  2,  3,  4])
>>> xs,ys=np.meshgrid(points,points)
>>> xs
array([[-5, -4, -3, -2, -1,  0,  1,  2,  3,  4],
       [-5, -4, -3, -2, -1,  0,  1,  2,  3,  4],
       [-5, -4, -3, -2, -1,  0,  1,  2,  3,  4],
       [-5, -4, -3, -2, -1,  0,  1,  2,  3,  4],
       [-5, -4, -3, -2, -1,  0,  1,  2,  3,  4],
       [-5, -4, -3, -2, -1,  0,  1,  2,  3,  4],
       [-5, -4, -3, -2, -1,  0,  1,  2,  3,  4],
       [-5, -4, -3, -2, -1,  0,  1,  2,  3,  4],
       [-5, -4, -3, -2, -1,  0,  1,  2,  3,  4],
       [-5, -4, -3, -2, -1,  0,  1,  2,  3,  4]])
>>> ys
array([[-5, -5, -5, -5, -5, -5, -5, -5, -5, -5],
       [-4, -4, -4, -4, -4, -4, -4, -4, -4, -4],
       [-3, -3, -3, -3, -3, -3, -3, -3, -3, -3],
       [-2, -2, -2, -2, -2, -2, -2, -2, -2, -2],
       [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
       [ 0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
       [ 1,  1,  1,  1,  1,  1,  1,  1,  1,  1],
       [ 2,  2,  2,  2,  2,  2,  2,  2,  2,  2],
       [ 3,  3,  3,  3,  3,  3,  3,  3,  3,  3],
       [ 4,  4,  4,  4,  4,  4,  4,  4,  4,  4]])

 一维数组A[a1,a2,a3…an],一维数组B[b1,b2,b3…bm],meshgrid生成两个数组:

《利用python进行数据分析》——Numpy基础

  •  sum:求和
>>> a=np.arange(6).reshape(3,2)
>>> a
array([[0, 1],
       [2, 3],
       [4, 5]])
>>> a.sum()    #全部求和
15
>>> a.sum(0)    #对列求和
array([6, 9])
>>> a.sum(1)    #对行求和
array([1, 5, 9])
  •  mean:算数平均数,零长度的数组的mean为nan
>>> a.mean()     #全部求平均数
2.5
>>> a.mean(0)   #对列求平均数
array([ 2.,  3.])
>>> a.mean(1)    #对行求平均数
array([ 0.5,  2.5,  4.5])
  • max:求最大值
>>> a.max()    #全部求最大值
5
>>> a.max(0)   #对列求最大值
array([4, 5])
>>> a.max(1)   #对行求最大值
array([1, 3, 5])
  • min:求最小值
>>> a.min()    #全部求最小值
0
>>> a.min(0)  #对列求最小值
array([0, 1])
>>> a.min(1)  #对行求最小值
array([0, 2, 4])
  •  argmax,argmin:求最大、最小元素的索引
>>> a.argmax()   #索引的是平铺的数组
5
>>> a.argmax(0)  #按列索引
array([2, 2], dtype=int32)
>>> a.argmax(1)   #按行索引
array([1, 1, 1], dtype=int32)

>>> a.argmin()
0
>>> a.argmin(0)
array([0, 0], dtype=int32)
>>> a.argmin(1)
array([0, 0, 0], dtype=int32)
  • cumsum:所有元素累计的和
>>> b
array([[2, 2],
       [2, 3],
       [4, 5]])

>>> b.cumsum() #对全部元素求累计和,原数组有几个元素返回的数组中就有几个元素
array([ 2,  4,  6,  9, 13, 18], dtype=int32)
#[2, 2+2, 2+2+2, 2+2+2+3, 2+2+2+3+4, 2+2+2+3+4+5] >>> b.cumsum(0) #对列求累计和 (b.shape(n,m),返回的数组shape(n,m)) array([[ 2, 2], [ 4, 5], [ 8, 10]], dtype=int32) #[2,2],[2+2,2+3],[2+2+4,2+3+5] >>> b.cumsum(1) #对行求累计和 (b.shape(n,m),返回的数组shape(n,m)) array([[2, 4], [2, 5], [4, 9]], dtype=int32) #[2,2+2],[2,2+3],[4,4+5]
  • cumprod:所有元素的累计积
>>> b
array([[2, 2],
       [2, 3],
       [4, 5]])

>>> b.cumprod()  #对全部元素求累计积
array([  2,   4,   8,  24,  96, 480], dtype=int32)
#[2,  2*2,  2*2*2,  2*2*2*3,  2*2*2*3*4,  2*2*2*3*4*5]
>>> b.cumprod(0) #对列求累计积
array([[ 2,  2],
       [ 4,  6],
       [16, 30]], dtype=int32)
#[2,2],[2*2,2*3],[2*2*4,2*3*5]

>>> b.cumprod(1) #对行求累计积
array([[ 2,  4],
       [ 2,  6],
       [ 4, 20]], dtype=int32)
#[2,2*2],[2,2*3],[4,4*5]
  • std:标准差
>>> b.std()
1.1547005383792515

>>> b.std(0)
array([ 0.94280904,  1.24721913])

>>> b.std(1)
array([ 0. ,  0.5,  0.5]
  • var:方差
>>> b.var()
1.3333333333333333

>>> b.var(0)
array([ 0.88888889,  1.55555556])

>>> b.var(1)
array([ 0.  ,  0.25,  0.25])
  • unique(x):计算x中的唯一元素,并返回有序结果
>>> b
array([[2, 2],
       [2, 3],
       [4, 5]])
>>> np.unique(b)
array([2, 3, 4, 5])
  • in1d(x,y):得到一个表示‘x的元素是否包含y’的布尔型数组
>>> np.in1d(b,c)
array([ True,  True,  True,  True, False, False], dtype=bool)
#  b中元素是否在c中,用b的每一个元素,与c的元素逐个比较
  • union1d(x,y):计算x、y的并集,并返回有序结果
>>> np.union1d(b,c)
array([0, 1, 2, 3, 4, 5])
  • intersect1d(x,y):计算x、y中公共元素,并返回有序结果
>>> a
array([[0, 1],
       [2, 3],
       [4, 5]])
>>> b
array([[0, 1],
       [5, 6]])
>>> np.intersect1d(a,b)
array([0, 1, 5])
  • setxor1d(x,y):集合的对称差,即异或
>>> a
array([[0, 1],
       [2, 3],
       [4, 5]])
>>> b
array([[0, 1],
       [5, 6]])
>>> np.setxor1d (a,b)
array([2, 3, 4, 6])
  • setdiff1d(x,y):集合的差,即元素在x中但不在y中
>>> a
array([[0, 1],
       [2, 3],
       [4, 5]])
>>> b
array([[0, 1],
       [5, 6]])
>>> np.setdiff1d(a,b)
array([2, 3, 4]
  • any:用于测试数组中是否存在一个或多个True
  • all:用于测试数组中是否全部为True
>>> bools=np.array([True,False])
>>> bools.any()
True
>>> bools.all()
False
  •  diag:以一维数组的形式返回方阵的对角线(或非对角线)元素,或将一维数组转换为方阵(非对角线元素为0)
>>> f=np.arange(9).reshape(3,3)
>>> f
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> np.diag(f)   #返回方阵f的对角线元素
array([0, 4, 8])
>>> np.diag(f,1)   #返回f对角线上移1位的元素
array([1, 5])
>>> np.diag(f,-2)  #返回f对角线下移2位的元素
array([6])
>>> g=np.arange(4)
>>> g
array([0, 1, 2, 3])
>>> np.diag(g)         #将一维数组g转换为方阵
array([[0, 0, 0, 0],
       [0, 1, 0, 0],
       [0, 0, 2, 0],
       [0, 0, 0, 3]])
  • dot:矩阵乘法
>>> k
array([[6, 4, 2],
       [5, 3, 1]])
>>> b
array([[2, 2],
       [2, 3],
       [4, 5]])
>>> b.dot(k)
array([[22, 14,  6],
       [27, 17,  7],
       [49, 31, 13]])
  • trace:计算对角线元素的和
>>> b=np.arange(9).reshape(3,3)
>>> b
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> b.trace ()
12
  •  det:计算矩阵行列式
>>> np.linalg.det(b)
0.0

 

  • inv:计算方阵的逆
>>> c
array([[1, 1, 1],
       [3, 4, 5],
       [6, 7, 8]])
>>> np.linalg.inv(c)
array([[ -4.50359963e+15,  -1.50119988e+15,   1.50119988e+15],
       [  9.00719925e+15,   3.00239975e+15,  -3.00239975e+15],
       [ -4.50359963e+15,  -1.50119988e+15,   1.50119988e+15]])
  • rand:产生均匀分布的样本值
>>> a=np.random.rand(6)
>>> a
array([ 0.84127444,  0.5384819 ,  0.90085008,  0.07750325,  0.35909086,
        0.70885957])
  • randint(low,high=None,size=None,dtype) :从给定的上下限范围随机取整数
>>> b=np.random.randint(0,9,size=(2,3))   #随机取值0~9的2行3列数组
>>> b
array([[2, 7, 1],
       [1, 4, 8]])

>>> c=np.random.randint(0,9)   #没有size,默认取一个值
>>> c
8
  • randn:产生正态分布(平均值为0,标准差为1)的样本值
>>> d=np.random.randn(6).reshape(2,3)
>>> d
array([[-0.01535237, -0.81693929, -0.71081245],
       [-0.10101115, -0.57806109,  1.48653213]])
  • permutation(x) :返回一个序列的随机排列或返回一个随机排列的范围

x:int或array_like
如果 x是一个整数,随机排列。
如果x是一个数组,随机复制一个元素。

>>> np.random.permutation(5)   #0~5的随机排序
array([3, 1, 0, 4, 2])
>>> np.random.permutation([1,2,3])  #数组中元素的随机排序
array([2, 1, 3])
>>> arr=[[1,2,3],[4,5,6]] 
>>> np.random.permutation(arr)      #二维数组中,行的随机排序
array([[4, 5, 6],
       [1, 2, 3]])
  •  seed:随机数种子
>>> np.random.seed(5); np.random.rand(10)
array([ 0.22199317,  0.87073231,  0.20671916,  0.91861091,  0.48841119,
        0.61174386,  0.76590786,  0.51841799,  0.2968005 ,  0.18772123])


>>> np.random.seed(5); np.random.rand(10)
array([ 0.22199317,  0.87073231,  0.20671916,  0.91861091,  0.48841119,
        0.61174386,  0.76590786,  0.51841799,  0.2968005 ,  0.18772123])

#同样的代码,反复输入运行,结果相同。