NumPy是Python中的一个运算速度非常快的一个数学库,它非常重视数组。它允许你在Python中进行向量和矩阵计算,并且由于许多底层函数实际上是用C编写的,因此你可以体验在原生Python中永远无法体验到的速度。
NumPy绝对是科学Python成功的关键之一,如果你想要进入Python中的数据科学和/或机器学习,你就要必须学习它。在我看来,NumPy的API设计得很好,所以我们要开始使用它并不困难。
这是一系列关于科学Python的文章中的第二篇,别忘了看看其他的哟(译者注:并不会放出所有的文章,只摘取部分文章)。
哇哦,你能让NumPy成为你的伙伴并且一起做的事真是太棒了 好吗?
'''
numpy 一维度数组
特点:
1.array()把python的类型转换成numpy的ndarray类型
2.转换会保持原始数据不变
内置函数:
1.最大值 max()
2.最小值 min()
3.形状 shape属性 (6,):一维度6长度数组
索引和切片:
1.通过下标素音
2.通过start:stop切片
排序:
1.sort()
2.sorted()
'''
a = np.array([2,0,1,5,8,3])
print('一维:数据类型',type(a))
print('一维:函数和属性',a.max(),a.min(),a.shape)
print('一维:索引和切片',a[0],a[1:4])
print('一维:未排序',a)
a.sort()
print('一维:以排序',a)
运行结果
runfile('/Users/lpf/Desktop/安康学院pyhton实训/python实训/第八天/numpy教程.py')
一维:数据类型
一维:函数和属性 8 0 (6,)
一维:索引和切片 2 [0 1 5]
一维:未排序 [2 0 1 5 8 3]
一维:以排序 [0 1 2 3 5 8]
'''
numpy 二维度数组
特点:
1.array()把python的类型转换成numpy的ndarray类型
2.转换会保持原始数据不变
内置函数:
1.最大值 max()
2.最小值 min()
3.形状 shape属性 (3, 4)
索引和切片:
1.通过下标素音
2.通过start:stop切片
排序:
1.sort()
2.sorted()
'''
b = np.array([[1,2,3,4],[8,9,10,11],[4,5,6,7]])
print('二维:数据类型',type(b))
print('二维:函数和属性',b.max(),b.min(),b.shape)
print('二维:索引和切片',b[0],b[0][0:2])
print('二维:列索引',b[:,1])
# np.newaxis 在原本的维度上添加一个一维
print('二维:获取列原本形状',b[:,np.newaxis,1])
运行结果
二维:数据类型
二维:函数和属性 11 1 (3, 4)
二维:索引和切片 [1 2 3 4] [1 2]
二维:列索引 [2 9 5]
二维:获取列 [[2]
[9]
[5]]
# 创建数组的函数
c = np.arange(0,20)
print('一维度整数数组:',c)
d = np.arange(0,20).reshape((2,10))
print('二维度整数数组:',d)
e = np.arange(0,24).reshape((2,3,4))
print('三维度整数数组:',e)
运行结果
一维度整数数组: [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
二维度整数数组: [[ 0 1 2 3 4 5 6 7 8 9]
[10 11 12 13 14 15 16 17 18 19]]
三维度整数数组: [[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
astype 改变数组类型
"""
参数 元祖 shape
创建数组0填充形状的多维数组 zeros()
默认类型:float
dtype 可以设置元素类型 np.uint8 整数
astype 重置数组元素类型
创建数组1填充形状的多维数组 ones()
"""
z = np.zeros((2,3,3),dtype=np.uint8)
print(z)
f = z.astype(np.float)
print(f)
z = np.ones((2,3,3),dtype=np.uint8)
print(z)
f = z.astype(np.float)
print(f)
运行结果
[[[0 0 0]
[0 0 0]
[0 0 0]]
[[0 0 0]
[0 0 0]
[0 0 0]]]
[[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]]
[[[1 1 1]
[1 1 1]
[1 1 1]]
[[1 1 1]
[1 1 1]
[1 1 1]]]
[[[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]
[[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]]
"""
repeat() 重复元素 1.元素 2.重复次数
"""
r = np.repeat((3,4,5),4)
print(r)
运行结果
[3 3 3 3 4 4 4 4 5 5 5 5]
通过广播机制在numpy算术运算时可以使用不同的数组类型
"""
广播(Broadcasting)
广播是一种强大的机制,它允许numpy在执行算术运算时使用不同形状的数组。
"""
"""
s.shape = b.shape 形状相同
"""
a = np.array([1,2,3,4])
b = np.array([10,20,30,40])
c = a * b
print(c)
"""
s.shape != b.shape 形状不相同
"""
a = np.array([[1,2,3],[10,10,10],[20,20,20],[30,30,30]])
b = np.array([1,2,3])
c = a + b
print(c)
运行结果
[ 10 40 90 160]
[[ 2 4 6]
[11 12 13]
[21 22 23]
[31 32 33]]
"""
数学函数 包含了大量各种数学运算的函数,三角函数,算数函数,复数处理等
三角函数 sin()正弦 cos()余弦 tan()正切
反三角函数 arcsin()反正弦 arccos()反余弦 arctan()反正切
反转计算成角度 degrees(sin,cos,tan) 返回 角度值
"""
a = np.array([0,30,45,60,90])
"""弧度 = np.pi / 180"""
sin_num = np.sin(a*np.pi / 180)
cos_num = np.cos(a*np.pi / 180)
tan_num = np.tan(a*np.pi / 180)
print("正弦",sin_num)
print("余弦",cos_num)
print("正切",tan_num)
sin_ang = np.arcsin(sin_num)
cos_ang = np.arccos(cos_num)
tan_ang = np.arctan(tan_num)
print("反正弦",sin_ang)
print("反余弦",cos_ang)
print("反正切",tan_ang)
print("反转正弦角度",np.degrees(sin_ang))
print("反转余弦角度",np.degrees(cos_ang))
print("反转正切角度",np.degrees(tan_ang))
运算结果
正弦 [0. 0.5 0.70710678 0.8660254 1. ]
余弦 [1.00000000e+00 8.66025404e-01 7.07106781e-01 5.00000000e-01
6.12323400e-17]
正切 [0.00000000e+00 5.77350269e-01 1.00000000e+00 1.73205081e+00
1.63312394e+16]
反正弦 [0. 0.52359878 0.78539816 1.04719755 1.57079633]
反余弦 [0. 0.52359878 0.78539816 1.04719755 1.57079633]
反正切 [0. 0.52359878 0.78539816 1.04719755 1.57079633]
反转正弦角度 [ 0. 30. 45. 60. 90.]
反转余弦角度 [ 0. 30. 45. 60. 90.]
反转正切角度 [ 0. 30. 45. 60. 90.]
"""
舍入函数
around函数 四舍五入值 1.数组 2.舍入的小数位数:默认0
floor函数 向下取整数
ceil函数 向上取整数
"""
ar = np.around([20.3,30.63,40.856,40.2345])
print("四舍五入值",ar)
fl = np.floor([20.3,30.63,40.856,40.2345])
print("向下取整数",fl)
ce = np.ceil([20.3,30.63,40.856,40.2345])
print("向上取整数",ce)
运行结果
四舍五入值 [20. 31. 41. 40.]
向下取整数 [20. 30. 40. 40.]
向上取整数 [21. 31. 41. 41.]
"""
算法函数 数组的的加减成除,数组必须具有相同的形状,符合广播规则
add()
subtract()
multiply()
divide()
reciprocal() 倒数,元素的倒数 1/4倒数4/1
power() 1.底数 2.幂次方
mod() 两数组余数
"""
a = np.arange(9,dtype=np.float_).reshape(3,3)
b = np.array([10,10,10])
print("add相加",np.add(a,b))
print("subtract相减",np.subtract(a,b))
print("multiply相乘",np.multiply(a,b))
print("divide相除",np.divide(a,b))
c = np.array([0.25,1.33,1,100])
print("倒数",np.reciprocal(c))
d = np.array([10,100,1000])
print("幂次方数",np.power(d,2))
f = np.array([1,2,3])
print("幂次方数",np.power(d,f))
g = np.array([10,20,30])
h = np.array([3,5,7])
print("余数",np.mod(g,h))
运行结果
add相加 [[10. 11. 12.]
[13. 14. 15.]
[16. 17. 18.]]
subtract相减 [[-10. -9. -8.]
[ -7. -6. -5.]
[ -4. -3. -2.]]
multiply相乘 [[ 0. 10. 20.]
[30. 40. 50.]
[60. 70. 80.]]
divide相除 [[0. 0.1 0.2]
[0.3 0.4 0.5]
[0.6 0.7 0.8]]
倒数 [4. 0.7518797 1. 0.01 ]
幂次方数 [ 100 10000 1000000]
幂次方数 [ 10 10000 1000000000]
余数 [1 0 2]
"""
统计函数 从数组中快速查询最小、最大、百分位标准差、方差等
amin() 参数:axis 1行比、0列比
amax()
ptp() 最大值-最小值的差
percentile() 度量,百分比 1.数组 2.半分比 0-100 3.axis
median() 计算数组的(中位数)中值
mean() 算数平均值
std() 标准差 sqrt(mean(x-x.mean())**2)
标准差是一组数组的平均值分散成都的一种度量
var() 方差 mean((x-x.mean())**2)
平均数之差的平方的平均数
"""
a = np.array([[3,7,5],[8,4,3],[2,4,9]])
print("最小值 行:",np.amin(a,axis=1))
print("最小值 列:",np.amin(a,axis=0))
print("最大值 行:",np.amax(a,axis=1))
print("最大值 列:",np.amax(a,axis=0))
print("最大-小值:",np.ptp(a))
print("最大-小值 列 :",np.ptp(a,axis=1))
print("最大-小值 列:",np.ptp(a,axis=0))
"""50%的分位数,a排序后的中位数"""
print("百分值:",np.percentile(a,50))
print("百分值 行上求:",np.percentile(a,50,axis=1))
print("百分值 列上求:",np.percentile(a,50,axis=0))
print("百分值 维持数组形状不变:",np.percentile(a,50,axis=0,keepdims=True))
"""中位数"""
print("中位数:",np.median(a))
print("中位数 行上求:",np.median(a,axis=1))
print("中位数 列上求:",np.median(a,axis=0))
"""平均值"""
print("平均值:",np.mean(a))
print("平均值 行上求:",np.mean(a,axis=1))
print("平均值 列上求:",np.mean(a,axis=0))
"""标准差"""
print("标准差:",np.std([1,2,3,4]))
"""方差"""
print("方差:",np.var([1,2,3,4]))
运算结果
最小值 行: [3 3 2]
最小值 列: [2 4 3]
最大值 行: [7 8 9]
最大值 列: [8 7 9]
最大-小值: 7
最大-小值 列 : [4 5 7]
最大-小值 列: [6 3 6]
百分值: 4.0
百分值 行上求: [5. 4. 4.]
百分值 列上求: [3. 4. 5.]
百分值 维持数组形状不变: [[3. 4. 5.]]
中位数: 4.0
中位数 行上求: [5. 4. 4.]
中位数 列上求: [3. 4. 5.]
平均值: 5.0
平均值 行上求: [5. 5. 5.]
平均值 列上求: [4.33333333 5. 5.66666667]
标准差: 1.118033988749895
方差: 1.25