本文记录学习过程中遇到的python语法知识
文章目录
python基础语法
range与xrange的区别
range返回一个list,而xrange是返回list生成器。都可以用for遍历
参数传递机制
函数调用时,在参数前面加*或**会自动把参数解析并一个个传给函数
用在tuple元组前面,**用在字典前面
eg.np.random.rand(*matrix2.shape)
本来matrix2.shape是一个tuple,不能作为参数传给函数,但把tuple中的每个元素解析出来,一个个传给函数就可以了
numpy
np.where(conditions)
np.where(x>5)返回的是坐标,因此x(np.where(x>5))返回筛选过后的x数组
axis
axis=0,以列为单位操作;axis=1,以行为单位操作;若不指定axis一般对所有元素变为一维进行运算
遍历numpy矩阵中的所有元素
it = np.nditer(x, flags=['multi_index'], op_flags=['readwrite'])
- 生成对x的迭代器,并赋予读/写权限
- 通过
it.multi_index
读取遍历的index,x[it.multi_index]读取元素 - 通过
it.iternext()
进入下一个元素的读取阶段
如何选择矩阵中多个不同坐标的数?
arr[横坐标list,纵坐标list]即可,横坐标list与纵坐标list一一对应
eg.
arr=array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
arr[[1,2],[0,1]]
=>array([4,9])
np.sum()
axis=0,以列为单位相加,axis=1,以行为单位相加
np.argsort()
numpy.argsort(a, axis=-1, kind=’quicksort’, order=None)
对矩阵a按轴进行排序,返回排序后的下标(返回的也是一个np.array)
note:是按从小到大排序,若对向量排序并返回最大的index:np.argsort(arr)[-1]即可
np.argmax()
返回最大的数的索引
bincount与argmax组合技
np.bincount(arr).argmax()
bincount算出arr中每个数出现的次数,该数字作为index,而argmax正好又是返回最大的数的index,组合起来就相当于返回arr中出现次数最多的数
np.bincount()
功能
计算array中每个数字出现的次数
注意
输入必须为非负整数!np.array里也不会出现字符串,全是数字,所以只能计算数字数组中每个元素出现的次数,按从0到最大的数字排列,因此返回数组长度为array中最大的数+1
eg.arr = np.array([2,4])
np.bincount(arr) =>[0,0,1,0,1]
2做索引,出现次数为1。4同理,0,1,3都没出现过所以为0
np.linspace()
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
在指定的间隔内返回均匀间隔的数字。
np.s_为什么要存在?
解析
np.s_是用来生成index的,比如np.s_[1:5]返回一个index
arr[np.s_[1:5]] == arr[1:5]
这样为什么不直接用arr[1:5]呢?
=> np.s_可以用作参数传递进函数,而不能直接把[1:5]当成参数
eg.np.delete()的第二个参数为要删除的index,也可以传整数向量list,但要传[1:5]就不方便了,用list的话只能[1,2,3,4,5]而np.s_可以直接np.s_[1:5]
数组拼接
- np.concatenate()拼接多个数组,axis选方向
- np.vstack()将多个数组在垂直方向拼接,输入可以是list
- np.hstack()将多个数组在水平方向拼接,输入可以是list
- np.c_[a,b]按行连接两个矩阵
- np.r_[a,b]按列连接两个矩阵
乘法 *与np.dot
*是对应元素分别相乘,若其中一个是向量,则是矩阵每行与向量对应元素分别相乘
np.dot是普通的矩阵乘法
广播机制
x是矩阵,v是向量,x+v则是x的每行都与v相加
索引写法
arr[3,4]和arr[3][4]好像都可以
SciPy
基于numpy,主要作用为提供计算和操作数组的函数
img = imread(‘img_name’):读取图像
img.dtype:图像类型
img.shape:图像大小
imresize(‘img_name’,shape):改变图像大小
imsave(‘file_name’,对象):存储图像
- 引入方法:from scipy.misc import imread, imsave, imresize
函数scipy.io.loadmat和scipy.io.savemat能够让你读和写MATLAB文件。
Pandas
to_csv()
参数
sep:分隔符
header:是否保留列明
index:是否保留Index
na_rep:用什么替换空值
选取行和列
选取行
- 连续多行的选择用类似于python的列表切片
- 按照指定的索引选择一行或多行,使用loc[]方法
- 按照指定的位置选择一行多多行,使用iloc[]方法
选取列
file[[列名。。。。]]