python之numpy

@numpy1.15.1

数据科学的基础库

0维,标量

1维,向量

2维,矩阵

3维,两个矩阵

生成数组

array,生成数组

In [43]: import numpy as np

In [44]: np.array([1,2,3,4])
Out[44]: array([1, 2, 3, 4])

shape,形状

ndim,维度

dtype,数据类型

size,数据量

In [45]: a=np.array([1,2,3,4])

In [46]: a.shape
Out[46]: (4,)

In [47]: a.ndim
Out[47]: 1

In [48]: a.dtype
Out[48]: dtype('int64')

In [49]: a.size
Out[49]: 4

ones

In [81]: np.ones((3,3))
Out[81]: 
array([[1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.]])

zeros

In [82]: np.zeros((3,3))
Out[82]: 
array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]])

full

In [83]: np.full((3,3),10)
Out[83]: 
array([[10, 10, 10],
       [10, 10, 10],
       [10, 10, 10]])

empty,只分配内存,不填充(显式的都是无意义的垃圾值)

In [85]: np.empty((4,3))
Out[85]: 
array([[4.67340138e-310, 6.93503607e-310, 0.00000000e+000],
       [0.00000000e+000, 4.74303020e-322, 3.16202013e-322],
       [4.67340152e-310, 1.33360294e+241, 1.66006057e-321],
       [4.79243676e-322, 4.67340141e-310, 4.67340116e-310]])

In [86]: np.empty((4,4))
Out[86]: 
array([[1., 0., 0., 0.],
       [0., 1., 0., 0.],
       [0., 0., 1., 0.],
       [0., 0., 0., 1.]])

eye,生成一个对角矩阵,单位矩阵:N*N的方阵,

In [89]: np.eye(5)
Out[89]: 
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.]])

随机数生成

均匀分布的随机每个数字概率相同,正态分布每个数字的概率不同,服从正态分布

np.random.rand(3,4)服从均匀分布U(0,1),概率密度函数U

In [11]: np.random.rand(3,4)
Out[11]: 
array([[0.36699488, 0.9741204 , 0.84815739, 0.48596074],
       [0.5928032 , 0.62280041, 0.31407069, 0.95993541],
       [0.25970683, 0.40320787, 0.0971164 , 0.67055418]])

np.random.uniform(low,hight,size)生成服从均匀分布U(low,hight)的size形状的数组

In [12]: np.random.uniform(1,10,(3,4))
Out[12]: 
array([[1.17581624, 5.50209972, 6.299659  , 9.47775073],
       [3.39811157, 8.42530786, 2.44554191, 5.38029127],
       [8.8163518 , 7.76073674, 2.29126795, 4.30997287]])

np.random.random(size=(3,4))生成[0.0,1.0)随机浮点数数组,半开区间,size传入元组为数组形状,服从均匀分布

In [5]: np.random.random((3,4))
Out[5]: 
array([[0.84320125, 0.82264588, 0.28592509, 0.84245593],
       [0.40883795, 0.58067854, 0.60638238, 0.45798846],
       [0.29094517, 0.75667093, 0.23649304, 0.54981549]])

np.random.randint(low=1,hight=10,size=(3,4))生成[low,hight)随机整数数组,size表示数组形状,服从均匀分布

In [6]: np.random.randint(1,10,(3,4))
Out[6]: 
array([[6, 7, 1, 6],
       [3, 8, 9, 1],
       [3, 8, 1, 8]])

np.random.randn(2,3)生成服从标准正态分布的2×3的数组

In [10]: np.random.randn(3,4)
Out[10]: 
array([[ 0.48757842, -1.26618141, -0.45154971, -0.42444533],
       [-1.62114112, -0.13627121, -0.33674115, -2.40336541],
       [ 0.15190233, -0.59217321, -0.28116279,  0.4059114 ]])

seed,随机种子,使随机可复现,传入整数参数作为一个标签tag,只要不是None则seed生效

In [39]: np.random.seed(10)#其后的随机生成数是一个固定的随机数

np.random.shuffle()随机打乱行,不能打乱列

In [21]: arr=np.arange(0,10,0.5).reshape(4,5)

In [22]: arr
Out[22]: 
array([[0. , 0.5, 1. , 1.5, 2. ],
       [2.5, 3. , 3.5, 4. , 4.5],
       [5. , 5.5, 6. , 6.5, 7. ],
       [7.5, 8. , 8.5, 9. , 9.5]])

In [23]: np.random.shuffle(arr)

In [24]: arr
Out[24]: 
array([[0. , 0.5, 1. , 1.5, 2. ],
       [7.5, 8. , 8.5, 9. , 9.5],
       [5. , 5.5, 6. , 6.5, 7. ],
       [2.5, 3. , 3.5, 4. , 4.5]])

 

数据类型

dtype可以直接传入np.array函数中改变数据类型,产生一个新的数组,非视图

In [47]: arr
Out[47]: array([1, 2, 3, 4, 5, 6, 7, 8, 9])

In [48]: arr1=np.array(arr,dtype=np.float64)

In [49]: arr1
Out[49]: array([1., 2., 3., 4., 5., 6., 7., 8., 9.])

astype,改变数组的数据类型,产生一个新的数组,不是视图

In [29]: arr.dtype
Out[29]: dtype('int64')


In [31]: arr1=arr.astype(np.float32)
Out[31]: 
array([[0., 1., 2., 3., 4.],
       [5., 6., 7., 8., 9.]], dtype=float32)

In [32]: arr.dtype
Out[32]: dtype('int64')

In [32]: arr.dtype
Out[32]: dtype('int64')

reshape,重构

In [51]: arr.reshape((3,3))
Out[51]: 
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

切片索引

arr[列][行],此处的列指的是列表,行指列表的第几个元素,跟表示形状shape的行列意义不同

In [54]: arr1
Out[54]: 
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])


In [56]: arr1[1]
Out[56]: array([4, 5, 6])

In [57]: arr1[1][1]
Out[57]: 5

In [58]: arr1[:][1]
Out[58]: array([4, 5, 6])

In [59]: arr1[1][:]
Out[59]: array([4, 5, 6])

花式索引

arr[[列],[行]] 此处的列指的是列表,行指列表的第几个元素,跟表示形状shape的行列意义不同



In [60]: arr1[[1]]
Out[60]: array([[4, 5, 6]])

In [61]: arr1[[1,2]]
Out[61]: 
array([[4, 5, 6],
       [7, 8, 9]])

In [62]: arr1[[1,2],[1]]
Out[62]: array([5, 8])

In [63]: arr1[[1,2],[1,2]]
Out[63]: array([5, 9])

布尔型索引

用条件判定去取(但是很好用),布尔型索引选取数组中数据,总是创建数据的副本,而非视图

arr[arr>0],返回一个符合条件元素的一维数组

非0为Ttue

0为False

In [65]: arr1
Out[65]: 
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

In [66]: arr1[arr1>5]#返回一个一维数组
Out[66]: array([6, 7, 8, 9])

In [68]: arr1
Out[68]: 
array([[1, 2, 3],
       [4, 5, 0],
       [0, 0, 0]])

data2 = data[names ==  'c',2:] #布尔型数组可以跟切片、数组混合使用
data3 = data[names == 'c'][:,2:]

深复制,浅复制

深复制,重新开辟内存,修改深复制,不会改变源数据

浅复制,共用原内存,获取到视图,修改浅复制会改变源数据

np.ix_

In [72]: a=np.arange(10).reshape(2,5)

In [73]: a
Out[73]: 
array([[0, 1, 2, 3, 4],
       [5, 6, 7, 8, 9]])

In [74]: ix=np.ix_([0,1],[2,4])

In [75]: ix
Out[75]: 
(array([[0],
        [1]]), array([[2, 4]]))

In [76]: ix[0]
Out[76]: 
array([[0],
       [1]])

In [77]: ix[1]
Out[77]: array([[2, 4]])

In [78]: ix[0].shape
Out[78]: (2, 1)

In [79]: ix[1].shape
Out[79]: (1, 2)

In [80]: a[ix]
Out[80]: 
array([[2, 4],
       [7, 9]])

 

数学运算

相同shape的运算

0轴,0方向,行方向,形状的行列和求值的行列相反

1轴,1方向,列方向

In [90]: a
Out[90]: 
array([[0, 1],
       [2, 3],
       [4, 5],
       [6, 7],
       [8, 9]])

In [91]: b
Out[91]: 
array([[10, 11],
       [12, 13],
       [14, 15],
       [16, 17],
       [18, 19]])

In [92]: a+b
Out[92]: 
array([[10, 12],
       [14, 16],
       [18, 20],
       [22, 24],
       [26, 28]])

In [93]: a-b
Out[93]: 
array([[-10, -10],
       [-10, -10],
       [-10, -10],
       [-10, -10],
       [-10, -10]])

In [94]: a*b
Out[94]: 
array([[  0,  11],
       [ 24,  39],
       [ 56,  75],
       [ 96, 119],
       [144, 171]])

In [95]: a/b
Out[95]: 
array([[0.        , 0.09090909],
       [0.16666667, 0.23076923],
       [0.28571429, 0.33333333],
       [0.375     , 0.41176471],
       [0.44444444, 0.47368421]])

广播

array([[1,2,3]])===>广播array([[1,2,3],[1,2,3],[1,2,3]])

 

通用函数(元算函数)

一元函数

 

二元函数

 

取反

转置:第一行变第一列

向量的乘法:对应位置相乘再累加,即向量的内积

矩阵的乘法:3×2的的矩阵必须乘以2行的矩阵

迹:对角线元素的和,非方阵的对角线是从(0,0)起

行列式:只有方阵才有行列式,不是满秩,行列式就是0

矩阵的秩,阶梯矩阵,第三行可以用前两行表示,x3可以通过线性组合x1,x2得到

满秩:不能通过线性组合表示,

特征值和特征向量:

单位向量:

两个向量相乘等于则表示,两个向量方向垂直

复数:-1=j**2

 

方阵的逆:A×B=E(单位矩阵),A和B互为逆,满秩的时候才有逆

 

zip打包成元组

In [93]: a=[1,2,3]

In [94]: b=[4,5,6]

In [95]: c=[11,22,33,44]

In [96]: d=[111,222,333,444,555]

In [97]: zip(a,b,c,d)
Out[97]: <zip at 0x7fa97dc64448>

In [98]: list(zip(a,b,c,d))
Out[98]: [(1, 4, 11, 111), (2, 5, 22, 222), (3, 6, 33, 333)]

np.where(cond,ar1,ar2)判断,嵌套判断

 

 

标准差:方差的开根号

方差:数据的变异程度,方差越小,表示数据集中在平均值附近(即期望附近)

期望:平均数,表示的数据的集中程度

分位数:中位数是50%的分位数

唯一化:重复项只返回一个

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值