Python学习笔记
基本语法
字符串操作
upper() 方法
将某个字符串变为大写
place.upper()
count()方法
计算某个字符串、列表里某个特定字符、字符串或数字的数目
place.count('o')
ASCII编码值获取
字符串中的每个字符占据一个字节。如果由字符串创建8bit整数数组,则刚好得到其ASCII编码值。
e.g. s='abcd' np.fromstring(s,dtype=np.int8)
列表操作
index()方法
查找列表中某个元素的下标
num.index(20)
append方法
在列表后添加元素
reverse()方法
将列表顺序倒排
数学公式
角度转弧度: math.radians
数组操作
- 数组可以使用reshape()方法,创建指定形状的新数组,而原数组的形状保持不变。e.g. d=a.reshape((2,2)) # same as a.reshape(2,2)
此时d和a共享数据存储空间。其中一个变量的变化会引起另一个变量的变化!! - Logspace()与linspace()类似,但logspace()创建的是等比数列,同样可以通过参数endpoint指定是否包含终值。可以通过参数base指定底数,默认为10。e.g. np.logspace(0,2,5) 注意:这里起始值为 1 0 0 10^0 100,终值为 1 0 2 10^2 102。
- 可以先定义一个从下标计算数值的函数,然后用fromfunction()通过此函数创建数组。
- 切片
a[1:-1:2]
表示从第二个元素到最后一个元素,每间隔一个元素取值。
注意:由切片得到的新数组,与原始数据的一块内存共享存储空间。 - 对于数组计算,np.sin比math.sin快10倍,这得益于np.sin在C语言级别的循环计算。但是由于要同时支持数组和单个值的计算,对单个数值的计算np.sin比math.sin慢很多,因为其内部实现比math.sin复杂很多。
- 对于类似“x=ab+c”的复杂运算,实际上会产生一个中间变量用来表示ab,因此建议将表达式分解为下面两行语句,以减少一次内存分配:
x = a*b
x +=c
- 对两个布尔数组使用and等布尔运算时,将跑出ValueError异常。因为布尔数组中有True也有False,所以numpy无法确定用户的运算目的。此时可以使用any()或all()方法。
e.g. np.any(a==b) and np.any(a>b)
生成随机数组
random包中的方法生成的随机数都只能生成单个随机数。可以使用numpy.random中的随机数生成方法。
图像处理
图像平移
需要对图像平移来进行图像增强,增加训练样本。我使用的是cv2包中的warpAffine函数。使用方法如下。
def translate_image(img, x, y):
move = np.float32([[1, 0, x], [0, 1, y]])
return cv2.warpAffine(img, move, (img.shape[1], img.shape[0]))
其它
无法安装cv2
安装opencv,使用命令“pip install opencv-python”。使用时,使用“import cv2”。类似的还有scikit-learn等。
PyCharm小技巧:断点调试时在控制台中运行命令。
按快捷键“Shift+Alt+F9”进行调试。程序暂停后,打开Console面板,将“Show Python Prompt”图标点亮,就可运行啦。
“python不是内部或外部命令…”的解决方法
如果安装python后,如果在cmd里输入python命令时出现这个错误,一般是因为没有将python目录添加到环境变量中。添加到环境变量后就好了。同理,还有在cmd中输入pip …时报同样的错误,这是因为没有将python目录下的Scripts文件夹加入到环境变量中。