1 python计算BMI指数
2 numpy中数组的概念
3 numpy的数据类型
4 numpy的常用属性
5 numpy的常见方法
6 numpy的索引与切片
7 numpy的比较运算符
8 numpy的基本函数
8.1 numpy的必会函数
8.2 numpy的随机数模块
9 numpy的赌场案例
# 身高
height = [170,173,178,180,183]
# 体重
weight = [76,65,70,77,75]
'''求BMI指数:身体质量指数=体重(KG)/身高(m)的平方'''
# 不需要使用numpy 就用python计算上述五个人的BMI指数
res = list(zip(height,weight))
for data in res:
bmi = data[1]/(data[0]/100)**2
print(bmi)
import numpy as np
"""
如何在notebook环境下执行下载模块的命令?
只需要在下载模块的语句前面加上一个感叹号即可
!pip3 install requests
"""
# 数组的概念
# 创建数组的语法结构 np.array(列表/元祖)
一维数组
np.array([1,2,3,4])/np.array((1,2,3,4))
# 结果都是:array([1, 2, 3, 4])
二维数组
np.array([
[1,2,3,4],
[5,6,7,8]
])
# 结果是:array([[1, 2, 3, 4],[5, 6, 7, 8]])
三维数组
np.array([[[1,2,3],[4,5,6],[7,8,9]]])
# 结果是:array([[[1, 2, 3],[4, 5, 6],[7, 8, 9]]])
"""
二维数组使用最为频繁
其次是一维数组
三维数组基本不用
"""
总结:numpy中很多数学操作都需要依赖于数组对象
所以我们周一的案例中需要先将python的列表转换成numpy中的数组之后再计算
# 由于numpy主要是用于计算,所以numpy数据类型以数字类型为主
'''为了不跟python里面数据类型关键字冲突,numpy最所有冲突的关键字后面加下划线'''
1.布尔型:bool_
2.整型:int_,int32,int64
无符号整型 uint8 uint16 uint32 uint64
# 回想MySQL:unsigned
3.浮点型:float_,float32,float64
4.复数型:complex_,complex64,complex128
针对数字类型后面的数字如何理解
int32只能表示(-2**31,2**31-1),因为它只有32个位,只能表示2**32个数
1.T 转置(行列数互换)
res = np.array([[11,22,33,44],[55,66,77,88]])
array([[11, 22, 33, 44],
[55, 66, 77, 88]])
res.T
array([[11, 55],
[22, 66],
[33, 77],
[44, 88]])
2.dtype(类似于python中的type方法 用于查看数据类型)
res
array([[11, 22, 33, 44],
[55, 66, 77, 88]])
res.dtype
dtype('int64')
3.size(统计数组内元素的个数)
4.ndim(数组的维数)
5.shape(获取数组的行数和列表 结果是一个元祖)
6.reshape(修改数组行列数) 了解
a = np.array([[1,2,3],[4,5,6]])
b = a.reshape(3,2)
print (b)
[[1, 2]
[3, 4]
[5, 6]]
针对numpy数组中的元素
1.数组内元素必须是同一类型(哪怕定义的时候故意捣乱内部也会自动统一)
r2 = np.array([1,1.1,True])
array([1. , 1.1, 1. ])
r3 = np.array([1,1.1,False])
array([1. , 1.1, 0. ])
如何查看方法的使用说明
针对python代码我们可以使用pycharm快捷键来查看
crtl + 鼠标左键
针对notebook环境下如何查看相关提示
1.在方法名的后面
先按shift键不松开的情况下按tab键即可
2.在方法名的后面加一个问号
直接执行代码即可
# 上述方法非常的好用,当你不知道一些内置方法的使用情况下基本都可以通过上述方式解决
# np.常见方法名()
1.array()
创建数组
2.arange()
range的numpy版
'''下面的方法了解即可'''
3.linspace()
与arange一致,只不过该方法顾头又顾尾
4.zeros() 根据指定形状和dtype创建全0数组
np.zeros((3,4))
5.ones() 根据指定形状和dtype创建全1数组
np.ones((3,4))
6.empty() 根据指定形状和dtype创建空数组(随机值)
np.empty(10)
7.eye() 根据指定边长和dtype创建单位矩阵
np.eye (5)
1.针对一维数组索引与切片的使用方式与python中的列表一致
res = np.array([11,22,33,44,55,66])
array([11, 22, 33, 44, 55, 66])
res[1]
22
res[2:-1]
array([33, 44, 55])
2.针对多维数组有行索引和列索引之分,与我们之前学习的略有不同
res[行索引,列索引]
# 如果行或者列都要,那么需要用冒号代替
res1[:,1:3] # 行都要 列只要索引1和2
array([[11, 22, 33, 44],
[55, 66, 77, 88],
[12, 23, 34, 45]])
res1[1:3,1:3]
array([[66, 77],
[23, 34]])
>
等价np.greater(arr1,arr2)
判断arr1的元素是否大于arr2的元素
>=
等价np.greater_equal(arr1,arr2)
判断arr1的元素是否大于等于arr2的元素
<
等价np.less(arr1,arr2)
判断arr1的元素是否小于arr2的元素
<=
等价np.less_equal(arr1,arr2)
判断arr1的元素是否小于等于arr2的元素
==
等价np.equal(arr1,arr2)
判断arr1的元素是否等于arr2的元素
!=
等价np.not_equal(arr1,arr2)
判断arr1的元素是否不等于arr2的元素
# 常用的数学函数
np.round(arr)
对各元素四舍五入
np.sqrt(arr)
计算各元素的算术平方根
np.square(arr)
计算各元素的平方值
np.exp(arr)
计算以e为底的指数
np.power(arr, α)
计算各元素的指数
np.log2(arr)
计算以2为底各元素的对数
np.log10(arr)
计算以10为底各元素的对数
np.log(arr)
计算以e为底各元素的对数
# 常用的统计函数(必会)
np.min(arr,axis)
按照轴的方向计算最小值
np.max(arr,axis)
按照轴的方向计算最大值
np.mean(arr,axis)
按照轴的方向计算平均值
np.median(arr,axis )
按照轴的方向计算中位数
np.sum(arr,axis)
按照轴的方向计算和
np.std(arr,axis)
按照轴的方向计算标准差
np.var(arr,axis)
按照轴的方向计算方差
"""
在上述统计函数中,参数axis用来控制行列
axis=1 表示行
axis=0 表示列
"""
1.在python中有有一个random模块
2.在numpy中有np的子模块random
numpy中的random子模块
np.random
rand 给定形状产生随机数组(0到1之间的数)
randint 给定形状产生随机整数
choice 给定形状产生随机选择
shuffle 与random.shuffle相同
uniform 给定形状产生随机数组(随机均匀分布)
normal 随机正态分布
"""复习python模块random如何生成随机验证码"""
jason有10000块钱,去某赌场嗨皮
假设输赢概率都是50%,并且赢一场赚100,输一场亏100
jason总共玩了1500场
问最后的金额如何估算???
# 总钞票数
money = 10000
res = ['输','赢']
# 判断输赢
for i in range(1500):
if random.choice(res) == '输':
money -= 100
else:
money += 100
print(money)
记录每一次jason的总钞票数并绘制折线图
'''记录每一次赌局完成后的钞票数'''
money = 10000
pgs = [money] # 记录每一次输赢之后的总钱数
res = ['输','赢']
# 判断输赢
for i in range(1500):
if random.choice(res) == '输':
money -= 100
else:
money += 100
pgs.append(money)
'''提前搂一眼后面会详细讲解的matplotlib模块'''
import matplotlib.pyplot as plt
plt.plot(range(1501),pgs) # x轴与y轴坐标数据
plt.show()