Numpy中常用的接口

  Numpy是利用python来进行数据分析中必须要掌握的基础。是高性能科学计算和数据分析的基础包。利用numpy能对整组数据无需循环就能进行快速的标准数学函数计算,同时能进行线性代数,随机数,以及傅里叶变换等等功能,而对于数据分析来说,比较重要的用途就是数据的清理,过滤,子集构造,转换,排序,描述统计等等。
  在使用的时候,对某个API接口记得不是太轻,需要从新度娘,这势必会浪费比较多的时间,因此就有了想总结它的想法,并且随着时间的推移,总结的越来越多,那么就会对numpy的用法越来越熟悉。

使用随机数random模块

  随机数初始化的时候,主要有normal正态(高斯)分布、rand均匀分布样本、uniform均匀分布值。

normal正态(高斯)分布

  使用np.random.normal函数,函数的参数有loc=0.0, scale=1.0, size=None。
loc为高斯分布的均值,scale为分布的标准差,size为数组的大小。API中的例子为。

mu, sigma = 0, 0.1 # mean and standard deviation
s = np.random.normal(mu, sigma, 1000) 
Verify the mean and the variance:
>>> abs(mu - np.mean(s)) < 0.01
    True
>>> abs(sigma - np.std(s, ddof=1)) < 0.01
    True

  数组生成的例子为:

import numpy as np
mu, sigma = 0, 0.1
# 1D
arr = np.random.normal(mu, sigma, size = (3))
print(arr)
#[ 0.06965057 -0.15870178  0.02776434]
# 2D
arr = np.random.normal(mu, sigma, size = (3,2))
print(arr)
# [[-0.14856599 -0.1339647 ]
#  [-0.02832001  0.00522524]
#  [-0.22456789 -0.09488004]]

rand均匀分布样本

# rand均匀分布
arr = np.random.rand(3)
print(arr)
# [0.50379029 0.9398595  0.77199327]
arr = np.random.rand(3,3)
print(arr)
# [[0.92527252 0.81515781 0.28641155]
#  [0.75766423 0.33699374 0.03968092]
#  [0.33108546 0.54098272 0.98990623]]

uniform均匀分布值

  参数为:uniform(low=0.0, high=1.0, size=None)

# 1D
arr = np.random.uniform(0,5,size=(4))
print(arr)
# [0.43100465 2.21567654 0.3282392  3.81198367]
# 2D
arr = np.random.uniform(0,5,size=(4,4))
print(arr)
# [[3.0967155  1.02823125 1.89036565 2.32619461]
#  [2.9605799  3.78598498 0.73145289 3.3206741 ]
#  [1.9616998  4.39008304 4.08777598 3.42920063]
#  [3.99813399 1.4941342  3.33004881 2.78779658]]

连续/随机整数

  连续整数使用arange(start=None, stop=None, step=None, dtype=None)

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

  随机整数使用:np.random.randint(low, high=None, size=None, dtype=’l’)

>>> np.random.randint(2, size=10)
    array([1, 0, 0, 0, 1, 1, 0, 0, 1, 0])
>>> np.random.randint(1, size=10)
    array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
>>> np.random.randint(5, size=(2, 4))
    array([[4, 0, 2, 1],
          [3, 2, 2, 0]])

协方差矩阵及特征值和特征向量

  协方差矩阵通过 np.cov,具体的参数为:
cov(m, y=None, rowvar=True, bias=False, ddof=None, fweights=None,
aweights=None):
  默认以行为向量单位,如果将rowvar设置为false,则以列为单位。

arr = np.random.rand(3,3)
print(arr)
# [[0.17750436 0.44068993 0.86621122]
#  [0.927718   0.27433882 0.16296677]
#  [0.73082541 0.44597569 0.06591675]]
cov_arr = np.cov(arr)
print(cov_arr)
# [[ 0.12077536 -0.12434009 -0.11576978]
#  [-0.12434009  0.17069209  0.12282209]
#  [-0.11576978  0.12282209  0.11128128]]

  计算出来协方差矩阵后,一般接下来是求它的特征值和特征向量,他俩在PCA降维中可以说是一对如影随从的好基友。特征值和特征向量通过np.linalg.eig。

eigVals,eigVects=np.linalg.eig(cov_arr)
print(eigVals)
# [2.74727275e-01 4.78818792e-18 4.54322373e-02]
print(eigVects)
# [[ 0.99203055 -0.10295612 -0.07263208]
#  [-0.11423842 -0.49179201 -0.86318607]
#  [-0.05315041 -0.86460433  0.49963425]]

矩阵运算

  矩阵运算常见的有加、减、乘、对数、e、平方、开平方等操作。

    a = np.random.randint(0,4,size=(3))
    b = np.random.randint(5,10,size=(3))
    # [2 1 0]
    print(a)
    # [8 6 5]
    print(b)
    arr_add = a + b
    # [10  7  5]
    print(arr_add)
    arr_diff = a -b
    # [-6 -5 -5]
    print(arr_diff)
    # 这里是矩阵的对应的元素相乘,要保证矩阵的尺寸相同
    arr = a*b
    # [16  6  0]
    print(arr)
    arr = np.exp(a)
    # [7.3890561  2.71828183 1.        ]
    print(arr)
    arr = np.log(b)
    # [2.07944154 1.79175947 1.60943791]
    print(arr)
    arr = np.square(a)
    # [4 1 0]
    print(arr)
    arr = np.sqrt(b)
    # [2.82842712 2.44948974 2.23606798]
    print(arr)
    sum = np.sum(a)
    # 3
    print(sum)
    meam = np.mean(a)
    # 1.0
    print(meam)
    # 求标准差
    arr = np.std(a)
    # 1.4142135623730951
    print(arr)

  矩阵还有一些高级的运算,例如矩阵相乘,转置等。

a = np.random.randint(0,4,size=(3,2))
b = np.random.randint(0,4,size=(2,3))
print(a)
# [[2 0]
#  [2 1]
#  [0 1]]
print(b)
# [[0 3 1]
#  [0 1 0]]
print(a.dot(b))
# [[0 6 2]
#  [0 7 2]
#  [0 1 0]]
print(a.T)
# [[2 2 0]
#  [0 1 1]]

  Numpy函数库中还存在另外一种数据类型matrix,在进行矩阵的运算时,它好比就是array的升级版,可以完成例如矩阵求逆,矩阵相乘,转置等操作。

mat_a = np.mat(a)
mat_b = np.mat(b)
# <class 'numpy.matrixlib.defmatrix.matrix'>
print(type(mat_a))
# [[6 3 2]
#  [9 6 0]
#  [3 2 0]]
print(mat_a * mat_b)
print(mat_a.I)
# [[-3.51716474e-17  3.00000000e-01  1.00000000e-01]
#  [ 1.00000000e+00 -3.00000000e-01 -1.00000000e-01]]
print(mat_b.T)
# [[3 3]
#  [2 1]
#  [0 2]]

矩阵维度转换

矩阵将为1D

  通过使用flatten,可以将矩阵的维度按照行或列将为1D。

>>> a = np.array([[1,2], [3,4]])
>>> a.flatten()#默认是按照行进行降维,如果要按照列进行降维,则使用'F'
    array([1, 2, 3, 4])
>>> a.flatten('F')
    array([1, 3, 2, 4])

维度转换

  维度的转换通过reshape,将矩阵从n*m,变为k*l,注意n*m = k*l。

arr = np.random.randint(7,size=(3,4))
a = arr.reshape(2,6)
print(a)
print(arr)
#[[3 1 0 1 3 0]
# [1 3 2 1 3 0]]
#[[3 1 0 1]
# [3 0 1 3]
# [2 1 3 0]]

切片Slice

  切片的规则为:[start:end:step],默认的step为1,如果要进行方向切片,则step = -1,如果要反向选取n个元素,则为[-1:-(n+1):-1]。例如:

arr = np.random.randint(1,10,size=(8))
print(arr)
# 反向选取4个元素
print(arr[-1:-5:-1])
#out = [8 7 5 4 2 5 2 4]
#   [4 2 5 2]

获取最大值

  使用argmax,可以返回矩阵的最大值所在的位置。例如:

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

  如果想获取最大值,可以直接使用np.max,例如:

     >>> a = np.arange(4).reshape((2,2))
    >>> a
    array([[0, 1],
           [2, 3]])
    >>> np.amax(a)           # Maximum of the flattened array
    3
    >>> np.amax(a, axis=0)   # Maxima along the first axis
    array([2, 3])
    >>> np.amax(a, axis=1)   # Maxima along the second axis
    array([1, 3])

排序

  如果要对numpy进行升序排列,则用np.sort(array),如果要进行降序排列,则步骤为:

arr = np.random.randint(1,10,size=(8))
print(arr)
#[6 2 9 1 8 8 2 3]
print(arr[-1:-5:-1])
#[3 2 8 8]
arr = np.sort(arr)
print(arr)
#[1 2 2 3 6 8 8 9]
print(arr[-1::-1])
#[9 8 8 6 3 2 2 1]

 对矩阵排序也可以使用argsort,它返回的是数组值从小到大的索引值。例如:

>>> x = np.array([3, 1, 2])
    >>> np.argsort(x)
    array([1, 2, 0])

    Two-dimensional array:

    >>> x = np.array([[0, 3], [2, 2]])
    >>> x
    array([[0, 3],
           [2, 2]])

    >>> np.argsort(x, axis=0)
    array([[0, 1],
           [1, 0]])

    >>> np.argsort(x, axis=1)
    array([[0, 1],
           [0, 1]])

文件存取

 numpy的文件读取主要有tofile和fromfile、save()和load()、savetxt()和loadtxt()等.具体就不往上写了,当一次搬运工,详细的使用可以参考:https://blog.csdn.net/voidfaceless/article/details/54619535
 https://blog.csdn.net/kebu12345678/article/details/54837245
 这两个博文写的都比较详细.

获取非0

 API为nonzero,返回两个数组,分别为非0元素所在的x,y的位置。例如:

>>> x = np.array([[1,0,0], [0,2,0], [1,1,0]])
>>> x
array([[1, 0, 0],
       [0, 2, 0],
       [1, 1, 0]])
>>> np.nonzero(x)
(array([0, 1, 2, 2]), array([0, 1, 0, 1]))

如果需要将位置组合在一起,则需要使用np.transpose:

>>> np.transpose(np.nonzero(x))
array([[0, 0],
       [1, 1],
       [2, 0],
       [2, 1])

数学运算

向量的夹角,使用arctan2(y, x),其中x作为X轴,要作为Y轴,即(x,y)组成的矩阵与原点(0, 0)的夹角。

    >>> x = np.array([-1, +1, +1, -1])
    >>> y = np.array([-1, -1, +1, +1])
    >>> np.arctan2(y, x) * 180 / np.pi
    array([-135.,  -45.,   45.,  135.])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值