NumPy库学习

Python库之Numpy

NumPy简介


Numpy官方教程


NumPy菜鸟教程


学习地址


前言

Python常用工具库

  • Numpy
  • Pandas
  • Matplotlib
  • Scikit-learn
  • tensorflow

关于机器学习

  • 流程:数据搜集与预处理(得到训练样本)->特征选择与模型构建(特征抽取->学习函数)-> 评估与预测
  • 机器学习本质:数学原理推导与实际应用技巧
  • 关于数学问题:边学边查,哪里不会查哪里即可

关于深度学习

  • 是什么:机器学习中神经网络算法的延伸,应用较广
  • 用处:深度学习在计算机视觉和自然语言处理中更厉害一些
  • which first?一切基础都是机器学习,打好坚实的基础

科学计算库numpy

  • IDE:pycharm
  • 导入库:import numpy as np

函数1 :numpy.genfromtxt(“file_name”,delimiter=’,’,dtype=str)

  • 用numpy打开数据,返回一个数据矩阵
  • 为了方便直接在工作目录下打开文件名,当然也可以指定目录和文件名和保存图片一样
  • delimiter为指定的分隔符,会将数据按指定的分隔符分开
  • dtype为指定的数据类型,分割后生成的数据类型
  • 实用方法:print(help(numpy.genfromtxt)),查看API手册

函数2: numpy.array([])

  • 括号里面传入list类型,自动生成对应数组,例如:
    1
    2
    np.array([1,2,3,4,5])  # 生成一维数组[1 2 3 4 5]
    np.array([ [1,2,3], [4,5,6], [7,8,9] ]) #生成二维数组[ [1 2 3] [4 5 6] [7 8 9] ]

函数3:object.shape

1
2
3
4
vector=np.array([1,2,3,4])
print(vector.shape) # 输出:(4,) ,表示一维数组4个元素
matrix=np.array([ [1,2,3], [4,5,6], [7,8,9] ])
print(matrix.shape) # 输出:(3,3),表示3行3列

函数4:object.dtype

  • Numpy array中的每一个元素类型必须想相同,当读入数据时Numpy会自动分清数据类型
    1
    2
    3
    4
    5
    import numpy as np
    numbers=np.array([1,2,3,4])
    print(numbers.dtype) # 输出: int32
    numbers=np.array([1,2,3,4.0])
    print(numbers.dtype) #输出: float64

数组取值

  • 一维数组:object[x:y]表示取出下标从x到y-1的数生成数组,取单个数传入下标即可
  • 二维数组:object[x,y]或者object[x][y]即可,注意下标从0开始
  • 二维数组取某个子矩阵的值:object[x1:x2,y1:y2],下标从0开始到上限减一,返回的还是矩阵,可用.shape查看
  • 获得第二行或列所有的元素:A[2,:]、A[:,2],冒号:表示该行或该列的所有元素,返回的是个向量,类型是ndarray
  • 基于上条,那么就可以给整行或整列赋值了:A[:,2]=[1,2,3],假如A一个3*3的矩阵,这条语句就是将第三列改为[1 2 3]

矩阵比较

1
2
3
4
5
import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
print(a==5) # 输出一个和a同型的boolean类型矩阵
judge=(a==5)
print(a[judge]) # 输出:[5]

更改数据类型object.astype()

  • 比如object是int32类型的,可以使用object.astype(float)转换成float64类型的

Numpy常用函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import numpy as np
a=np.arange(5)
print(a) # 输出:[0 1 2 3 4]
a=np.arange(15).reshape(3,5)
print(a) # 输出3行5列的二维矩阵
print(a.shape) # 输出:(3, 5)
print(a.ndim) # 输出:2 ,表示数组的维数
print(a.dtype) # 输出:int32,表示矩阵的数据类型
print(a.size) # 输出:15,表示数组的元素个数
print(np.zeros((3,4))) # 生成3行4列的0矩阵
print(np.ones((2,3,4),dtype=np.int32)) # 生成3维矩阵,元素全为1,且数据类型为int32
print(np.full((2,3),2)) # 生成2行3列的矩阵并用2填充整个矩阵
print(np.arange(10,30,5)) # 生成一个10到30之间的等差数列,首项为10,公差为5
print(np.random.random((2,3))) # 生成一个2行3列的随机矩阵,元素范围在-1到+1之间
print(np.linspace(0,2*pi,10)) # 生成10个数的等差数列,首项是0,末项是2*pi

矩阵运算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import numpy as np
from numpy import pi
a=np.array([20,30,40,50])
b=np.arange(1,5) # 生成 [1,2,3,4]
print(a-b) # 输出: [19,28,37,46],同型矩阵对应位置相加减
print(b**2) # 输出:[1,3,9,16],同型矩阵对应位置相乘
print(a<35) # 输出:[ True True False False]
print(a*b) # 输出:[20 60 120 200],同型矩阵对应位置相乘

a=np.eye(2)
print(a) # 生成一个2维的单位矩阵,元素类型为float64
print(a.dtype) # 输出:float64
a=a.astype(np.int32) # 转为int32类型
print(a.dtype) # 输出:int32
b=np.array([[1,2],[3,4]])
print(a*b) # 对应位置相乘
print("--------")
print(a.dot(b)) # 矩阵相乘,要求前一个矩阵的列数等于后一个矩阵的行数,但向量除外(支持矢量内积)
print("--------")
print(np.dot(a,b)) # 同上矩阵相乘,要求前一个矩阵的列数等于后一个矩阵的行数

矩阵常用操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import numpy as np
from numpy import pi
np.random.seed(0)
a=np.arange(3)
print(a)
print(np.exp(a)) # 分别计算e的幂,以a中的元素为指数
print(np.sqrt(a)) # 计算a中每个元素的开根
a=np.floor(np.random.random((3,4))*10) # 生成3行4列的随机矩阵,整体放大10倍后向下取整
print(a)
print('-----------')
print(a.ravel()) # 把原矩阵拉成一个一维向量
a.shape=(2,6) # 重塑矩阵
print(a) # 生成2行6列的二维矩阵,元素个数一定要和原矩阵相同;指定一个维数时另一个就自动确定了
print('---\n',a.T) # 矩阵转置
b=np.floor(np.random.random((2,6))*10) # 生成2行6列的随机矩阵
print(np.hstack((a,b))) # 把矩阵b接在矩阵a后面,生成增广矩阵
print(np.vstack((a,b))) # 把矩阵b接在矩阵a下面,拼接矩阵务必要求吻合

a=np.floor(np.random.random((2,12))*10)
print(a)
print(np.hsplit(a,3)) # 把2行12列的矩阵按列均分为几个子矩阵
print(np.hsplit(a,(3,4))) # 在第三列和第4列后面切分成3个子矩阵
a=a.T
print(np.vsplit(a,3)) # 按行平均切分成3个子矩阵

参考文档

  1. python+numpy
  2. 对NumPy中dot()函数的理解
  3. numpy.sum()的使用