第一章、预备知识
一、python基础
1、列表推导式与条件赋值
作用:创建一个列表
形式:[* for i in *],第一个 * 为映射函数,其输入为后面 i 指代的内容,第二个 * 表示迭代的对象。
如:
In:[my_func(i) for i in range(5)]
Out:[0, 2, 4, 6, 8]
列表表达式还支持多层嵌套,如下面的例子中第一个 for 为外层循环,第二个为内层循环:
In:[m+'_'+n for m in ['a', 'b'] for n in ['c', 'd']]
Out:['a_c', 'a_d', 'b_c', 'b_d']
条件赋值
形式:value = a if condition else b :
2、匿名函数与map方法
匿名函数(lambda):
语法:变量名= lambda 参数:表达式
map函数:
格式:map(function,iterable,…)
In : list(map(lambda x: 2*x, range(5)))
Out : [0, 2, 4, 6, 8]
3、 zip对象与enumerate方法
zip:zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表
>>>a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b) # 返回一个对象
>>> list(zipped) # list() 转换为列表
[(1, 4), (2, 5), (3, 6)]
>>> list(zip(a,c)) # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]
In [25]: dict(zip(L1, L2)) #用于字典映射
Out[25]: {'a': 'd', 'b': 'e', 'c': 'f'}
enumerate 是一种特殊的打包,它可以在迭代时绑定迭代元素的遍历序号:
In [22]: L = list('abcd')
In [23]: for index, value in enumerate(L):
....: print(index, value)
....:
0 a
1 b
2 c
3 d
二、numpy基础
1、np数组的构造
一般通过array构造
一些特殊的数组:
【a】等差序列
np.linspace:不包含终止数。
np.arange:包含终止数
[b] 特殊矩阵 zeros,eye,full
[c] 随机矩阵 random
2、np.数组的变形与合并
[a]:转置:T
[b]:合并操作:r_,c_
对于二维数组而言:r_表示上下合并,c_表示左右合并。
[c]:维度变换:‘C’,‘F’
'C’模式:逐行进行填充读取
'F’模式:逐列进行填充读取
3、np数组的切片与索引
数组的切片模式支持使用slice类型的start🔚step切片
4、常用函数
【a】where
where是一种条件函数,可以指定满足条件与不满足条件位置对应的填充值:
例:
In[78]:a=np.array([-1,1,-1,0])
In[79]:np.where(a>0,a,5) #对应位置为True时填充a对应元素,否则填充5Out[79]:array([5,1,5,5])
【b】nonzero,argmax,argmin
这三个函数返回的都是索引,nonzero返回非零数的索引,argmax,argmin分别返回最大和最小数的索引:
【c】any,all
any指当序列至少存在一个True或非零元素时返回True,否则返回Falseall指当序列元素全为True或非零元素时返回True,否则返回False
【d】cumprod,cumsum,dif
cumprod,cumsum分别表示累乘和累加函数,返回同长度的数组,diff表示和前一个元素做差,由于第一个元素为缺失值,因此在默认参数情况下,返回长度是原数组减1
In[87]:a=np.array([1,2,3])
In[88]:a.cumprod()
Out[88]:array([1,2,6],dtype=int32)
In[89]:a.cumsum()
Out[89]:array([1,3,6],dtype=int32)
In[90]:np.diff(a)
Out[90]:array([1,1])
【e】统计函数
常用的统计函数包括max,min,mean,median,std,var,sum,quantile,其中分位数计算是全局方法,因此不能通过array.quantile的方法调用:
例:
In[91]:target=np.arange(5)
In[92]:target
Out[92]:array([0,1,2,3,4])
In[93]:target.max()
Out[93]:4
In[94]:np.quantile(target,0.5)#0.5分位数
Out[94]:2.0
In[95]:target=np.array([1,2,np.nan])
In[96]:targetOut[96]:array([1.,2.,nan])In[97]:target.max()Out[97]:nan
In[98]:np.nanmax(target)
Out[98]:2.0
In[99]:np.nanquantile(target,0.5)
Out[99]:1.5
对于协方差和相关系数分别可以利用
cov,corrcoef计算:
二维Numpy数组中统计函数的axis参数,它能够进行某一个维度下的统计特征计算,当axis=0时结果为列的统计指标,当axis=1时结果为行的统计指标:
例:
In[104]:target=np.arange(1,10).reshape(3,-1)
In[105]:target
Out[105]:array([[1,2,3],[4,5,6],[7,8,9]])
In[106]:target.sum(0)
Out[106]:array([12,15,18])
In[107]:target.sum(1)
Out[107]:array([6,15,24])
5、广播机制
广播机制用于处理两个不同维度数组之间的操作,这里只讨论不超过两维的数组广播机制。【a】标量和数组的操作
【b】二维数组之间的操作
【c】一维数组与二维数组的操作
6、向量与矩阵的计算
【a】向量内积:dot
【b】向量范数和矩阵范数:np.linalg.norm
【c】矩阵乘法:@