原来用Matlab(octave)做机器学习的居多,吴恩达老师以前在机器学习课也是用matlab(octave)。时代在进步,近些年,python已经成为机器学习热门的工具,吴老师的深度学习课程已经用python3.6了。技术在发展,识时务者为俊杰,为了理解和应用机器学习技术,以及进行数据分析,需要学习 python。
(1)Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
在 Python 中,变量就是变量,它没有类型,我们所说的”类型”是变量所指的内存中对象的类型。
等号(=)用来给变量赋值。
(2)标准数据类型
Number(数字)、String(字符串)、List(列表)、Tuple(元组)、Set(集合)、Dictionary(字典)
表达式语句和 print() 函数、使用文件对象的 write() 方法、str.format() 函数来格式化输出值使输出的形式更加多样、repr() 或 str() 函数来实现将输出的值转成字符串
print("Hello, World!")
单行注释以 # 开头,多行注释用三个单引号 ”’ 或者三个双引号 “”” 将注释括起来
变量存储在内存中的值。在创建变量时会在内存中开辟一个空间。
(1)raw字符串(原始字符串)
在字符串前面加个前缀r,表示这是一个 raw 字符串,里面的字符就不需要转义了
(2)多行显示
除了可以使用单引号’ ‘、双引号” “表示一个字符串,还可以使用三引号来表示一个字符串
”’ ”’。单引号和双引号不能用来表示多行显示,而三引号可以
(3)字符串类型
str类型
str类型采用的ASCII编码,也就是说它无法表示中文。
unicode类型采用unicode编码,能够表示任意的字符
(1)整型(Int) - 通常被称为是整型或整数,是正或负整数,不带小数点。Python3 整型是没有限制大小的,可以当作 Long 类型使用,所以 Python3 没有 Python2 的 Long 类型。
(2)浮点型(float) - 浮点型由整数部分与小数部分组成,浮点型也可以使用科学计数法表示(2.5e2 = 2.5 x 102 = 250)
bool类型的变量
一个逻辑表达式,其实最终是代表了一个bool类型的结果首先需要捋清常用的关系(比较)运算符、逻辑运算符> 、>=、<、<=、==这些为关系运算符
序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。
Python有6个序列的内置类型,但最常见的是列表和元组。
list1 = ['ListDemo', 'ListTest', 1997, 2000];
list2 = [1, 2, 3, 4, 5 ];
list3 = ["a", "b", "c", "d"];
Python的元组与列表类似,不同之处在于元组的元素不能修改。
元组使用小括号,列表使用方括号。
元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。
tup1 = ('tupledemo', 'tupletest', 1997, 2000)
tup2 = (1, 2, 3, 4, 5 )
tup3 = "a", "b", "c", "d"
(1)if语句
age = 20
if age >= 18:
print 'your age is', age
print 'adult'
print 'END
(2) if-else
if age >= 18:
print 'adult'
else:
print 'teenager'
(3) if-elif-else
if age >= 18:
print 'adult'
elif age >= 6:
print 'teenager'
elif age >= 3:
print 'kid'
else:
print 'baby'
elif 意思就是 else if
(4)for循环
L = ['Adam', 'Lisa', 'Bart']
print L[0]
print L[1]
print L[2]
L = ['Adam', 'Lisa', 'Bart']
for name in L:
print name
(5)while循环
N = 10
x = 0
while x < N:
print x
x = x + 1
(6)break退出循环
sum = 0
x = 1
while True:
sum = sum + x
x = x + 1
if x > 100:
break
print sum
(7)continue继续循环
L = [75, 98, 59, 81, 66, 43, 69, 85]
sum = 0.0
n = 0
for x in L:
sum = sum + x
n = n + 1
print sum / n
for x in L:
if x < 60:
continue
sum = sum + x
n = n + 1
(8)多重循环
for x in ['A', 'B', 'C']:
for y in ['1', '2', '3']:
print x + y
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式:
d = {key1 : value1, key2 : value2 }
集合中包含一系列的元素,在Python中这些元素不需要是相同的类型,且这些元素在集合中是没有存储顺序的
集合的表示方法是花括号,这与dict 是一样的,可以通过括号或构造函数来初始化一个集合,如果传入的参数有重复,会自动忽略:
{1,2,"hi",2.23}
{2.23, 2, 'hi', 1}
set("hello")
{'l', 'h', 'e', 'o'}
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
def functionname( parameters ):
"函数_文档字符串"
function_suite
return [expression]
切片操作(slice)可以从一个字符串中获取子字符串(字符串的一部分)。我们使用一对方括号、起始偏移量start、终止偏移量end 以及可选的步长step 来定义一个分片,格式:
[start:end:step]
在Python中,如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们成为迭代(Iteration)。
在Python当中的迭代是很抽象的,它与java不同,它是通过for..in来实现的:
for i in range(1,101):
if i % 7 ==0:
print (i)
操作:打开、显示和保存图像,图像通道、几何变换、裁剪
(1)图片的打开与显示
from PIL import Image
img=Image.open('d:/test.png')
img.show()
使用的是Pillow是由PIL fork而来,因此还是要从PIL中进行import. 使用open()函数来打开图片,使用show()函数来显示图片。
图片显示方式是调用操作系统自带的图片浏览器来打开图片
from PIL import Image
import matplotlib.pyplot as plt
img=Image.open('d:/test.png')
plt.figure("demo")
plt.imshow(img)
plt.show()
pip install matplotlib
不需要figure默认是带axis,进行关闭
plt.axis('off')
打开图片后,可以使用一些属性来查看图片信息
print img.size #图片的尺寸
print img.mode #图片的模式
print img.format #图片的格式
(2)图片的保存
img.save(‘d:/demo.jpg’)
不仅能保存图片,还是转换格式jpg
(3)图像通道
①彩色图像转灰度图
from PIL import Image
import matplotlib.pyplot as plt
img=Image.open('d:/ex.jpg')
gray=img.convert('L')
plt.figure("beauty")
plt.imshow(gray,cmap='gray')
plt.axis('off')
plt.show()
② 通道分离与合并
from PIL import Image
import matplotlib.pyplot as plt
img=Image.open('d:/ex.jpg') #打开图像
gray=img.convert('L') #转换成灰度
r,g,b=img.split() #分离三通道
pic=Image.merge('RGB',(r,g,b)) #合并三通道
plt.figure("beauty")
plt.subplot(2,3,1), plt.title('origin')
plt.imshow(img),plt.axis('off')
plt.subplot(2,3,2), plt.title('gray')
plt.imshow(gray,cmap='gray'),plt.axis('off')
plt.subplot(2,3,3), plt.title('merge')
plt.imshow(pic),plt.axis('off')
plt.subplot(2,3,4), plt.title('r')
plt.imshow(r,cmap='gray'),plt.axis('off')
plt.subplot(2,3,5), plt.title('g')
plt.imshow(g,cmap='gray'),plt.axis('off')
plt.subplot(2,3,6), plt.title('b')
plt.imshow(b,cmap='gray'),plt.axis('off')
plt.show()
(4)裁剪图片
从原图片中裁剪感兴趣区域(roi),裁剪区域由4-tuple决定,该tuple中信息为(left, upper, right, lower)。 Pillow左边系统的原点(0,0)为图片的左上角。坐标中的数字单位为像素点。
from PIL import Image
import matplotlib.pyplot as plt
img=Image.open('d:/ex.jpg') #打开图像
plt.figure("beauty")
plt.subplot(1,2,1), plt.title('origin')
plt.imshow(img),plt.axis('off')
box=(80,100,260,300)
roi=img.crop(box)
plt.subplot(1,2,2), plt.title('roi')
plt.imshow(roi),plt.axis('off')
plt.show()
用plot绘制显示出图片后,将鼠标移动到图片上,会在右下角出现当前点的坐标,以及像素值。
(5)几何变换
Image类有resize()、rotate()和transpose()方法进行几何变换。
①图像的缩放和旋转
dst = img.resize((128, 128))
dst = img.rotate(45) # 顺时针角度表示
②转换图像
dst = im.transpose(Image.FLIP_LEFT_RIGHT) #左右互换
dst = im.transpose(Image.FLIP_TOP_BOTTOM) #上下互换
dst = im.transpose(Image.ROTATE_90) #顺时针旋转
dst = im.transpose(Image.ROTATE_180)
dst = im.transpose(Image.ROTATE_270)
transpose()和rotate()没有性能差别。
Python除非项目的特别需求,纯粹学习新的技术建议直接学习3,Python3 不再向下兼容