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])
 


数组
    批量  索引  切片  函数  统计方法  随机数生成 
 
 
 
 
 
 
posted @ 2018-11-11 15:23  Alice的小屋  阅读(81)  评论(0编辑  收藏  举报