numpy学习笔记
1.numpy的概念
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。NumPy 为开放源代码并且由许多协作者共同维护开发。NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:
- 一个强大的N维数组对象 ndarray
- 广播功能函数
- 整合 C/C++/Fortran 代码的工具
- 线性代数、傅里叶变换、随机数生成等功能
2.numpy的应用
NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用, 这种组合广泛用于替代 MatLab,是一个强大的科学计算环境,有助于我们通过 Python 学习数据科学或者机器学习。
SciPy 是一个开源的 Python 算法库和数学工具包。
SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。
Matplotlib 是 Python 编程语言及其数值数学扩展包 NumPy 的可视化操作界面。它为利用通用的图形用户界面工具包,如 Tkinter, wxPython, Qt 或 GTK+ 向应用程序嵌入式绘图提供了应用程序接口(API)。
3.numpy的安装
pip工具进行安装
pip install numpy
4.numpy Ndarray 对象
NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。
ndarray 对象是用于存放同类型元素的多维数组。
ndarray 中的每个元素在内存中都有相同存储大小的区域。
5.numpy的使用
5.1 numpy数组的创建
1 | import numpy as np |
type(score) # numpy.ndarray ndarray类型数据
5.2 numpy数组的属性
1 | score.shape # (8, 5) 八行五列 |
5.3 numpy数组的形状
1 | a = np.array([[1,2,3],[4,5,6]]) |
5.4 生成numpy数组的方法
1.生成0或1
np.zeros(shape=(3, 4))
1 | array([[0., 0., 0., 0.], |
np.ones(shape=(2,3))
1 | array([[1., 1., 1.], |
2.从现有数组生成 array,copy,asarray
data1 = np.array(score)
data2 = np.copy(score)
data3 = np.asarray(score)
data1,data2,data3都是:
1 | array([[80, 89, 86, 67, 79], |
3.生成固定范围的数组 linspace,arange
1 | np.linspace(0, 10, 5) # 在[0,10]范围内生成5个数 等距 |
1 | np.arange(0, 11, 5) # 在[0,11)范围内步长为5 |
6.生成随机数组
6.1 均匀分布
1 | # 1.均匀分布 |
6.2 正态分布
1 | # 2.正态分布 |
7.数组的操作
7.1 切片和索引
data3 = np.random.normal(0,1,(8,10)) # 均值为0,方差为1,生成8行10列数据
1 | array([[ 2.21987369e+00, 7.66808504e-01, -2.17809103e+00, |
1 | data3[0,0:3] # 取第一天的前三个数据 |
7.2 修改数组形状
1 | # 1.reshape |
7.3 修改数组类型
1 | # 1.astype #修改数据类型 |
7.4 数组去重
1 | # unique 去重操作 |
7.6 逻辑运算
1 | data3 > 0.3 # 从中选出大于0.3的数据,返回true和false |
7.7 通用判断函数
1 | # 1.all()只要有一个False就是False,全是True才是True |
7.8 np.where(三元运算符)
1 | # where(布尔值,True的位置的值,False位置的值) |
7.9 统计运算
1 | temp |
1 | # 前四天的最大涨幅 |
7.10 数组和数组,数组和数之间的运算
1 | arr = np.array([[1, 2, 3, 2, 1, 4], [5, 6, 1, 2, 3, 1]]) |
数组与数组之间的运算:
- +(加),维数要相同
- *(乘),(m, n) * (n, l) = (m, l)
7.11 矩阵运算
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
36
37
38
39
40
41
42# ndarray存储矩阵
a = np.array([[80, 86],
[82, 80],
[85, 78],
[90, 90],
[86, 82],
[82, 90],
[78, 80],
[92, 94]])
# matrix存储矩阵
b = np.mat([[80, 86],
[82, 80],
[85, 78],
[90, 90],
[86, 82],
[82, 90],
[78, 80],
[92, 94]])
type(b)
numpy.matrix
# 求总成绩 分别乘权重
weight = np.array([[0.7],[0.3]])
# 1.矩阵相乘 matmul
np.matmul(a,weight) # 成绩矩阵a和权重矩阵b相乘
array([[81.8],
[81.4],
[82.9],
[90. ],
[84.8],
[84.4],
[78.6],
[92.6]]
# 2.矩阵相乘 dot
np.dot(a,weight) # 成绩矩阵a和权重矩阵b相乘
array([[81.8],
[81.4],
[82.9],
[90. ],
[84.8],
[84.4],
[78.6],
[92.6]]1
2
3
4
5
6
7
8
9
10
11
12
13weight1 = np.matrix([[0.7],[0.3]])
# 3.矩阵相乘
b * weight1 # 因为b和weight1都是matrix类型的 所以可以直接相乘
# 4.矩阵相乘
a @ weight # array类型相乘可以用@
array([[81.8],
[81.4],
[82.9],
[90. ],
[84.8],
[84.4],
[78.6],
[92.6]]
7.12 合并和分割
1 | c |
1 | x = np.arange(9) |
7.13 读取导入文件
f = np.genfromtxt(‘test.csv’,delimiter=’,’)