04 - numpy
numpy
pip3 install numpy
ipython
例一:
In [1]: import numpy as np
In [2]: import random
In [3]: a = [random.uniform(100.0,200.0) for i in range(50)]
In [4]: a.sort()
In [12]: x = 6.8
In [27]: a = np.array(a)
In [31]: a * x # 就可以得到结果, 不用for循环遍历列表,一次乘。。
例二:
In [33]: a = [random.uniform(10.0,20.0) for i in range(50)]
In [35]: b = [random.randint(1,10) for i in range(50)]
In [41]: a = np.array(a)
In [43]: b = np.array(b)
In [45]: a * b # 就可以得到结果, 哇哇 。。。
In [46]: (a * b).sum()
Out[46]: 4020.0832995906194
In [57]: a = np.array(range(5))
In [58]: a
Out[58]: array([0, 1, 2, 3, 4])
In [59]: a.dtype
Out[59]: dtype('int32')
int64
In [62]: 2**63-1
Out[62]: 9223372036854775807
uint64
In [64]: 2**64-1
Out[64]: 18446744073709551615
一维数组:
In [57]: a = np.array(range(5))
In [58]: a
Out[58]: array([0, 1, 2, 3, 4])
In [66]: a.dtype
Out[66]: dtype('int32')
In [67]: a.size
Out[67]: 5
二维数组:
In [71]: a = np.array([[1,2,3],[4,5,6]])
In [72]: a
Out[72]:
array([[1, 2, 3],
[4, 5, 6]])
In [74]: a.dtype
Out[74]: dtype('int32')
In [75]: a.size
Out[75]: 6
In [76]: a.shape
Out[76]: (2, 3)
In [280]: np.arange(15).reshape(3,5)
Out[280]:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
三维数组:
In [81]: b = np.array([[[1,2,3],[4,5,6]],[[1,2,3],[3,3,4]]])
In [82]: b
Out[82]:
array([[[1, 2, 3],
[4, 5, 6]],
[[1, 2, 3],
[3, 3, 4]]])
In [83]: b.shape
Out[83]: (2, 2, 3) # 两页,两行三列。
转置:
In [101]: a = np.array([[1,2,3],[4,5,6]])
In [102]: a
Out[102]:
array([[1, 2, 3],
[4, 5, 6]])
In [103]: a.T
Out[103]:
array([[1, 4],
[2, 5],
[3, 6]])
In [104]: _.T
Out[104]:
array([[1, 2, 3],
[4, 5, 6]])
查看维数:
In [109]: a = np.array([[1,2,3],[4,5,6]])
In [110]: a.ndim
Out[110]: 2
In [111]: b = np.array([[[1,2,3],[4,5,6]],[[1,2,3],[3,3,4]]])
In [112]: b.ndim
Out[112]: 3
In [113]: np.array([1,2,3])
Out[113]: array([1, 2, 3])
In [114]: np.array([0]*10)
Out[114]: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
In [115]: np.zeros(10)
Out[115]: array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
In [116]: a = np.zeros(10)
In [117]: a.dtype
Out[117]: dtype('float64')
In [118]: a = np.zeros(10,dtype='int')
In [119]: a.dtype
Out[119]: dtype('int32')
In [130]: b = np.ones(10,dtype='int')
In [131]: b
Out[131]: array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
In [132]: b.dtype
Out[132]: dtype('int32')
In [146]: a = np.empty(20) # 内存中残留的值
In [147]: a
Out[147]:
array([6.23042070e-307, 1.86918699e-306, 1.69121096e-306, 6.36175514e-307,
8.90105597e-307, 6.23053614e-307, 7.56592338e-307, 1.60220528e-306,
7.56602523e-307, 1.42417221e-306, 1.37961641e-306, 2.22522597e-306,
1.33511969e-306, 1.24610383e-306, 1.86918699e-306, 1.78021663e-306,
6.23060065e-307, 1.78020169e-306, 2.22522596e-306, 2.22522596e-306])
In [152]: np.arange(20)
Out[152]:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19])
In [153]: np.arange(2,10)
Out[153]: array([2, 3, 4, 5, 6, 7, 8, 9])
In [154]: np.arange(2,10,3)
Out[154]: array([2, 5, 8])
In [155]: np.arange(2,10,0.3)
Out[155]:
array([2. , 2.3, 2.6, 2.9, 3.2, 3.5, 3.8, 4.1, 4.4, 4.7, 5. , 5.3, 5.6,
5.9, 6.2, 6.5, 6.8, 7.1, 7.4, 7.7, 8. , 8.3, 8.6, 8.9, 9.2, 9.5,
9.8])
In [177]: np.linspace(0,10,20) # 份数为20份,0-10的间距是一样的
Out[177]:
array([ 0. , 0.52631579, 1.05263158, 1.57894737, 2.10526316,
2.63157895, 3.15789474, 3.68421053, 4.21052632, 4.73684211,
5.26315789, 5.78947368, 6.31578947, 6.84210526, 7.36842105,
7.89473684, 8.42105263, 8.94736842, 9.47368421, 10. ])
应用:
pip3 install matplotlib
In [182]: x = np.linspace(-10,10,10000)
In [183]: x
Out[183]:
array([-10. , -9.9979998, -9.9959996, ..., 9.9959996,
9.9979998, 10. ])
In [184]: y = x**2
In [186]: import matplotlib.pyplot as plt
In [187]: plt.plot(x,y)
Out[187]: [<matplotlib.lines.Line2D at 0x261518698d0>]
In [188]: plt.show()
单位矩阵:
In [190]: np.eye(5)
Out[190]:
array([[1., 0., 0., 0., 0.],
[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.]])
In [226]: a = np.arange(5)
In [227]: a
Out[227]: array([0, 1, 2, 3, 4])
a + 1 a * 3 1 // a a **0.5 a > 5
a + b a / b a ** b a % b a == b
a = np.array([[1,2,3],[4,5,6]])
b = np.arange(15).reshape(3,5)
b[0]
b[0][2]
b[0,2]
In [326]: a = np.arange(10)
In [327]: a
Out[327]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
一维数组:
切片修改数据 ,元数据也会被修改,它是浅copy, 省空间。
二维数组:
In [352]: a = np.arange(15).reshape((3,5))
In [353]: a
Out[353]:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
In [380]: a[1:,2:4]
Out[380]:
array([[ 7, 8],
[12, 13]])
In [381]: a[:,3:5]
Out[381]:
array([[ 3, 4],
[ 8, 9],
[13, 14]])
方法一:
In [405]: a = [random.randint(0,10) for i in range(20)]
In [406]: a
Out[406]: [7, 10, 7, 9, 0, 4, 10, 10, 4, 1, 5, 7, 0, 0, 9, 5, 9, 10, 6, 2]
In [412]: list(filter(lambda x:x>5, a))
Out[412]: [7, 10, 7, 9, 10, 10, 7, 9, 9, 10, 6]
方法二:
In [464]: a = [random.randint(0,10) for i in range(20)]
In [465]: a
Out[465]: [2, 2, 1, 8, 3, 2, 4, 2, 9, 6, 4, 0, 6, 9, 10, 0, 5, 0, 7, 8]
In [466]: a = np.array(a)
In [467]: a
Out[467]:
array([ 2, 2, 1, 8, 3, 2, 4, 2, 9, 6, 4, 0, 6, 9, 10, 0, 5,
0, 7, 8])
In [471]: a>5
Out[471]:
array([False, False, False, True, False, False, False, False, True,
True, False, False, True, True, True, False, False, False,
True, True])
In [468]: a[a>5]
Out[468]: array([ 8, 9, 6, 6, 9, 10, 7, 8])
In [510]: a[(a>5) & (a%2==0)]
Out[510]: array([ 8, 6, 6, 10, 8])
In [513]: a[(a>5) | (a%2==0)]
Out[513]: array([ 2, 2, 8, 2, 4, 2, 9, 6, 4, 0, 6, 9, 10, 0, 0, 7, 8])
题一:
In [3]: a = np.arange(20)
In [4]: a
Out[4]:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19])
In [8]: a[[1,3,4,6,7]]
Out[8]: array([1, 3, 4, 6, 7])
题二:
In [11]: a = np.arange(20).reshape(4,5)
In [12]: a
Out[12]:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])
In [20]: a[:,[1,3]]
Out[20]:
array([[ 1, 3],
[ 6, 8],
[11, 13],
[16, 18]])
In [28]: a[[1,3],:][:,[1,3]]
Out[28]:
array([[ 6, 8],
[16, 18]])
In [48]: a = np.arange(-5,5)
In [49]: a
Out[49]: array([-5, -4, -3, -2, -1, 0, 1, 2, 3, 4])
In [50]: np.abs(a) # 绝对值
Out[50]: array([5, 4, 3, 2, 1, 0, 1, 2, 3, 4])
In [52]: np.sqrt(a) # 开方
。。。
In [57]: np.exp(a) # 对数
Out[57]: 7.38905609893065
In [58]: np.log(a) # 指数
Out[58]: 0.6931471805599453
-2 -1.6 -1 0 1 1.6 2
int() # 向0取整
round() # 四舍五入,小于0.5向里,大于0.5向外
import math
math.ceil() # 向上取整,向右取整
math.floor() # 向下取整,向左取整
a = np.arange(-5.6,5.6)
np.floor(a) # 向下
np.ceil(a) # 向上
np.round(a) == np.rint(a) # 四舍五入
np.trunc(a) == int() # 向0取整
x,y = np.modf(a) # 小数和整数分开
In [147]: a = np.arange(5)
In [148]: a
Out[148]: array([0, 1, 2, 3, 4])
In [149]: b = a/a
In [150]: b
Out[150]: array([nan, 1., 1., 1., 1.])
In [158]: b[np.isnan(b)]
Out[158]: array([nan])
In [159]: b[~(np.isnan(b))] # 取反
Out[159]: array([1., 1., 1., 1.])
In [171]: a
Out[171]: array([3, 4, 5, 6, 7])
In [172]: b
Out[172]: array([4, 0, 2, 0, 2])
In [173]: c
Out[173]: array([0.75, inf, 2.5 , inf, 3.5 ])
In [174]: c[c!=np.inf]
Out[174]: array([0.75, 2.5 , 3.5 ])
In [175]: c[np.isinf(c)]
Out[175]: array([inf, inf])
In [176]: c[~np.isinf(c)]
Out[176]: array([0.75, 2.5 , 3.5 ])
In [198]: a
Out[198]: array([0, 1, 2, 3, 4])
In [199]: b
Out[199]: array([4, 3, 2, 1, 3])
In [200]: np.maximum(a,b)
Out[200]: array([4, 3, 2, 3, 4])
In [204]: a
Out[204]: array([0, 1, 2, 3, 4])
In [205]: b
Out[205]: array([4, 3, 2, 1, 3])
In [206]: np.minimum(a,b)
Out[206]: array([0, 1, 2, 1, 3])
1,2,3,4,5
mean: 3
求方差:
((1-3)**2 + (2-3)**2 + (3-3)**2 + (4-3)**2 + (5-3)**2)/5 == a.var()
标准差:
np.sqrt(((1-3)**2 + (2-3)**2 + (3-3)**2 + (4-3)**2 + (5-3)**2)/5) == a.std()
In [229]: a = np.array([1,2,3,4,5])
In [230]: a
Out[230]: array([1, 2, 3, 4, 5])
In [231]: a.sum()
Out[231]: 15
In [233]: a.mean()
Out[233]: 3.0
In [236]: a.var()
Out[236]: 2.0
In [241]: a.std()
Out[241]: 1.4142135623730951
应用:数据落在了 a.mean() + a.std() 和 a.mean() - a.std() 之间
In [249]: a = np.arange(0,10,0.2)
In [250]: a
Out[250]:
array([0. , 0.2, 0.4, 0.6, 0.8, 1. , 1.2, 1.4, 1.6, 1.8, 2. , 2.2, 2.4,
2.6, 2.8, 3. , 3.2, 3.4, 3.6, 3.8, 4. , 4.2, 4.4, 4.6, 4.8, 5. ,
5.2, 5.4, 5.6, 5.8, 6. , 6.2, 6.4, 6.6, 6.8, 7. , 7.2, 7.4, 7.6,
7.8, 8. , 8.2, 8.4, 8.6, 8.8, 9. , 9.2, 9.4, 9.6, 9.8])
In [251]: a.mean()
Out[251]: 4.9
In [252]: a.std()
Out[252]: 2.8861739379323628
In [253]: a.mean() + a.std()
Out[253]: 7.786173937932363
In [254]: a.mean() - a.std()
Out[254]: 2.0138260620676376
a.min()
a.max()
a.argmin()
a.argmax()
In [260]: import random
In [261]: random.random()
Out[261]: 0.7725475865544935
In [262]: random.randint(0,10)
Out[262]: 6
In [263]: random.randint(0,10)
Out[263]: 4
In [264]: random.choice([1,3,4,5])
Out[264]: 5
In [265]: random.choice([1,3,4,5])
Out[265]: 1
In [267]: a = [1,3,4,5]
In [268]: random.shuffle(a)
In [269]: a
Out[269]: [4, 1, 5, 3]
In [279]: np.random.randint(0,10)
Out[279]: 1
In [280]: np.random.randint(0,10,10) # 一维
Out[280]: array([9, 1, 6, 0, 0, 3, 0, 8, 1, 8])
In [282]: np.random.randint(0,10,(3,4)) # 二维
Out[282]:
array([[9, 7, 8, 6],
[4, 1, 4, 2],
[8, 1, 5, 7]])
In [284]: np.random.randint(0,10,(3,4,5)) # 三维
Out[284]:
array([[[3, 7, 4, 8, 1],
[2, 7, 8, 1, 8],
[7, 1, 9, 0, 4],
[5, 9, 0, 3, 2]],
[[8, 5, 0, 5, 0],
[2, 6, 5, 8, 1],
[2, 9, 9, 6, 5],
[4, 7, 4, 6, 1]],
[[8, 5, 4, 1, 0],
[6, 6, 4, 3, 4],
[4, 2, 4, 2, 8],
[4, 9, 6, 5, 3]]])
In [288]: np.random.rand(10)
Out[288]:
array([0.12471542, 0.7179123 , 0.3137219 , 0.36422807, 0.68218315,
0.0974964 , 0.25255141, 0.58760724, 0.55523285, 0.37578271])
In [290]: np.random.choice([1,2,3],10)
Out[290]: array([1, 3, 3, 1, 2, 1, 2, 3, 1, 2])
In [300]: np.random.uniform(1,4,10)
Out[300]:
array([2.68220871, 3.72339786, 1.923402 , 2.22345875, 3.07580396,
2.55167499, 3.54389674, 1.98956494, 3.80577479, 1.10780115])
数组
批量 索引 切片 函数 统计方法 随机数生成