概述
python版本2.0 3.0+可以运行
NOTE: 让python支持中文注释 只要在python开头加
以下代码任意一条即可。
-
#coding:gbk
-
#coding:utf-8
-
#-*-coding:gbk-*-
#快速排序函数
#快速排序函数
def quicksort(arr):
if len(arr)<1:
return arr
pivot = arr[len(arr)/2]
left = [x for x in arr if x<pivot]
middle = [x for x in arr if x==pivot]
right = [x for x in arr if x>pivot]
return quicksort(left)+ middle + quicksort(right)
# 快速排序函数调用
quicksort([7,4,6,5,3])
t,F=True, False
print(t != F)
#字符串变量
stringDemo= "字符串演示"
print(stringDemo)
print("n")
print(stringDemo, len(stringDemo),"world")
#字符串拼接
#字符串拼接
hw= stringDemo+" "+"world"
print(hw)
# 按照格式输出字符串()注意中间那个百分号
hw2= '%s%s%d'%('string 1','string 2',10)
print(hw2)
#首字母大写
h="hello"
# 注意方法有个括号
#注意这个方法不会修改原来变量的值需要用:=来更新一下
h=h.capitalize()
print(h)
#首字母大写
h="hello"
# 注意方法有个括号
#注意这个方法不会修改原来变量的值需要用:=来更新一下
h=h.capitalize()
print("使用方法更新h将首字母大写 ",h)
#右对齐打印使用空格站位一共20个符号位
print(h.rjust(20))
#居中打印
print(h.center(20))
#使用子字符串代替特定的字符
print(h.replace('l','(ell)'))
# 输出:He(ell)(ell)o
#删除开头空白字符
print(' wo rld'.strip())
# 列表
# 列表
listExample=[1,2,3,4]
print (listExample,listExample[2])
# 打印出列表与 第2+1个元素
# -1相当于反向索引
# 使用append添加索引到末端
# 错误的使用方法-->listExample=listExample.append("bar")此方法返回值为空
# 不能采用更新的方法来更新原有列表
listExample.append("bar")
print(listExample)
# 移除列表末端的元素
listExample.pop()#这个pop是有()的
print listExample
([1, 2, 3, 4], 3)
[1, 2, 3, 4, 'bar']
[1, 2, 3, 4]
# 循环Loops
# 循环Loops
animals=['cat','monkey','rabbit']
for animal in animals:
print(animal)
#在循环体内访问每个元素的指针 ,可以用内置的枚举(enumerate)函数,注意起始的ID为0
animals=['cat','monkey','rabbit']
for idx,animal in enumerate(animals):
print('#%d:%s'%(idx+1,animal))#+1是为了消除起始标号为0带来的影响
# cat
# monkey
# rabbit
# #1:cat
# #2:monkey
# #3:rabbit
列表的解析
# 列表的解析
# (list comprehensions)
# 将列表中的每一个元素用特定的表达式进行转换
nums = [0,1,2,3,4]
squares = []
for x in nums:
squares.append(x**2)
print(squares)#[0, 1, 4, 9, 16]
# 列表解析的一种简单的写法
# 也即是# (list comprehension)
squares = [x**2 for x in nums]
print(squares)#[0, 1, 4, 9, 16]
# 列表解析的同时可以包含条件语句
nums=[0,1,2,3,4]
even_square = [x**2 for x in nums if x%2==0]
print(even_square)#[0, 4, 16]
字典
# 字典(Dictionary)
# 用来存储键值对的结构(键,值)
# 与Java中的Map结构差不多
d= {'cat':'cute','dog':'furry'}#创建字典 用:表示一对键值对 用,来 分开键值对
print d['cat']
# cute
print 'cat' in d
# True
d['fish']='wet'
print(d['fish'])
# wet
print(d)
# {'fish': 'wet', 'dog': 'furry', 'cat': 'cute'}
print(d.get('cat','N/A'))
# cute
print(d.get('monkey','N/A'))
# N/A
print(d.get('monkey','NNNNNNNNNNN'))
# NNNNNNNNNNN
#移除字典中的元素:使用del函数
del d['fish']
print (d)
# {'dog': 'furry', 'cat': 'cute'}
print(d.get('fish'))
# None
print(d.get('fish','提示信息:没有鱼这种东西'))# 提示信息:没有鱼这种东西
字典的迭代
# 字典的迭代
d={'people':2,'cat':4,'spider':8}
for animalSpecie in d:
leg = d[animalSpecie]
print(animalSpecie,' have' ,leg,' legs')
# ('cat', ' have', 4, ' legs')
# ('spider', ' have', 8, ' legs')
# ('people', ' have', 2, ' legs')
# 也可以使用iteritem的方式进行迭代
for animalSpecie, leg in d.iteritems():#这里重点是d后面有.iteritems()--->迭代项
print('%s have %d legs'%(animalSpecie,leg))
# cat have 4 legs
# spider have 8 legs
# people have 2 legs
# ('cat', ' have', 4, ' legs')
# ('spider', ' have', 8, ' legs')
# ('people', ' have', 2, ' legs')
# cat have 4 legs
# spider have 8 legs
# people have 2 legs
字典的解析(轻松构造字典)
#字典的解析(Dictionary Comprehension)
#通过字典解析可以轻松构造字典
nums=[0,1,2,3,4,5,6]
#注意这里是个花括号 {}
even_num_to_square={x:x**2 for x in nums if x%2==0}
print(even_num_to_square)
# {0: 0, 2: 4, 4: 16, 6: 36}
集合()Sets
# 集合存放无序的不同的圆度
# 集合用花括号{}表示,如果将一个序列转换为集合,那么序列中的重复元素将被剔除
# 并且原来的序列会被打散
# 集合()Sets
# 集合存放无序的不同的圆度
# 集合用花括号{}表示,如果将一个序列转换为集合,那么序列中的重复元素将被剔除
# 并且原来的序列会被打散
d={'setele1','setele2','setele3','setele4'}
# d= {'cat':'cute','dog':'furry'}#创建字典 用:表示一对键值对 用,来 分开键值对
for idx,element in enumerate(d):
print('#%d is %s'%(idx,element))
# 0 is setele3
# 1 is setele2
# 2 is setele1
# 3 is setele4
#向集合中添加一个元素
d.add('new1')
for idx,element in enumerate(d):
print('#%d is %s'%(idx,element))
#0 is setele3
#1 is setele2
#2 is setele1
#3 is new1
#4 is setele4
集合的解析
# 集合的解析
from math import sqrt
print ({int(sqrt(x)) for x in range(30)})
# set([0, 1, 2, 3, 4, 5])
元祖
Tuples是一种特殊的数据结构
有序
可以通过键值对索引
可以作为集合中的元素
# 元祖
# Tuples是一种特殊的数据结构
# 有序
# 可以通过键值对索引
# 可以作为集合中的元素
# 通过元祖键值创建字典
d = {(x,x+1):x for x in range(10)}
print(d[(5,6)])
# 5
t=(5,6)#新建一个元祖
print(d[t])#d通过t来索引获取x的值
函数
# 函数
def sign(x):
if x>0:
return 'positive hhh'
elif x==0:
return 'zero hhh'
else:
return 'negatve hhh'
# print(sign(-33))
for x in [-1,0,1]:
print sign(x)
# negatve hhh
# zero hhh
# positive hhh
# 使用可选参来定义函数
def hello(name, loud=False):#定义一个函数
if loud:
print('Hello,%s !!!!!!'%(name.upper()))#全部大写
else:
print('Hello,%s ~'%name)#全部小写
print('使用默认参数 即loud=False')
hello('leiyuqing')
print('使用自定义参数 即loud=True')
hello('leiyuqing',loud=True)
# 使用默认参数 即loud=False
# Hello,leiyuqing ~
# 使用自定义参数 即loud=True
# Hello,LEIYUQING !!!!!!
# 类
# python中 类的语法很直接
class Greeter:
# 构造函数
# name
#深坑!!! init 两边不是_ 而是__就是两个下划线的意思!总是报错哈哈哈
# 类
# python中 类的语法很直接
class Greeter:
# 构造函数
# name
def __init__(self,name):#深坑!!! init 两边不是_ 而是__就是两个下划线的意思!总是报错哈哈哈
self.name=name
# self.name=name#创建一个变量实例
#实例方法
def greet(self,loud=False):
if loud:
print('Hello,%s !!!!!!'%(self.name.upper()))#全部大写
else:
print('Hello,%s ~'%self.name)#全部小写
g=Greeter('leiyuqing')#创建一个Greeter实例
g.greet()#调用实例方法 进行打印
g.greet(loud=True)#调用实例方法,进行打印
# Hello,leiyuqing ~
# Hello,LEIYUQING !!!!!!
# 关于Numpy
# np是python关于科学计算的核心库,提供高性能的多维数组对象以及相关工具
# 用法和MATLAB类似
import numpy as np
# 关于Numpy
# np是python关于科学计算的核心库,提供高性能的多维数组对象以及相关工具
# 用法和MATLAB类似
import numpy as np
a= np.array([1,2,3])#创建一维数组
print(type(a))#<type 'numpy.ndarray'>
a[0]=5#改变数组的元素
print(a)#[5 2 3]
#创建秩为2 的数组
b = np.array([[1,2,3],[4,5,6]])
print(b)
# [[1 2 3]
# [4 5 6]]
# 打印出b的形状shape信息
print(b.shape)#(2, 3)
#索引元素打印
print(b[0,1])#2 第一行第二个
# Numpy提供了大量方法创建数组
a=np.zeros((3,2))
print(a)
# [[0. 0.]
# [0. 0.]
# [0. 0.]]
# 创建全部为1 的矩阵(指定尺寸)
b=np.ones((3,2))
print(b)
# [[1. 1.]
# [1. 1.]
# [1. 1.]]
#创建指定尺寸的,所有元素相同的矩阵
c=np.full((3,2),88)
print(c)
# [[88 88]
# [88 88]
# [88 88]]
# 创建3x3的单位矩阵
d=np.eye((3))
print(d)
# [[1. 0. 0.]
# [0. 1. 0.]
# [0. 0. 1.]]
# 使用随机数创建3x3的矩阵
e=np.random.random((3,3))
print(e)
# [[0.57703016 0.18892427 0.22221829]
# [0.59258764 0.46604284 0.35703615]
# [0.20300843 0.43196674 0.74231142]]
# 数组的索引
# 数组的索引
# 与python的列表类似 np的数组也可以使用切片的语法,因为数组是可以是多维的数组,所以必须为每个维度制定好切片
import numpy as np
#创建秩为2 形状shape为(3,4)的数组
a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
print(a)
# [[ 1 2 3 4]
# [ 5 6 7 8]
# [ 9 10 11 12]]
# 取出第一行二列开始的形状为(2,2)的数组
b = a[: 2,1:3]#(行为所有行到第2+1行之前,列为从第1+1列开始到第3+1列之前)
print(b)
# [[2 3]
# [6 7]]
!!!注意!!!!# 切取出来的子数组实际上是原始数组的的一份浅备份,
# 因此修改子数组,原始数组也将被修改
# 切取出来的子数组实际上是原始数组的的一份浅备份,
# 因此修改子数组,原始数组也将被修改
import numpy as np
a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
b = a[: 2,1:3]
print(a)
# [[ 1 2 3 4]
# [ 5 6 7 8]
# [ 9 10 11 12]]
# 取出第一行二列开始的形状为(2,2)的数组
b = a[: 2,1:3]#(行为所有行到第2+1行之前,列为从第1+1列开始到第3+1列之前)
print(b)
# [[2 3]
# [6 7]]
# ==============
print('original a:',a[0,1])
b[0,0]=7777
print('AFTER changing b a:',a[0,1])
# [[ 1 2 3 4]
# [ 5 6 7 8]
# [ 9 10 11 12]]
# [[2 3]
# [6 7]]
# ('original a:', 2)
# ('AFTER changing b a:', 7777)
# 整型数组索引
# 在使用切片索引数组时
# 得到的总是原始数组的子数组,整型数组
# 允许我们利用其它数组中的数据 来索引另一个数组 构建一个新的数组
换而言之就是 以数组作为下标 来索引数组 略微抽象
print(a[[0,1,2],[0,1,0]])
与
print([a[0,0],a[1,1],a[2,0]])
等效
# 整型数组索引
# 在使用切片索引数组时
# 得到的总是原始数组的子数组,整型数组
# 允许我们利用其它数组中的数据构建一个新的数组
import numpy as np
a = np.array([[1,2],[3,4],[5,6]])
# b = a[: 2,1:3]
print(a)
print('=========')
print(a[[0,1,2],[0,1,0]])
print('equivilent to n')
print([a[0,0],a[1,1],a[2,0]])
# [[1 2]
# [3 4]
# [5 6]]
# =========
# [1 4 5]
# equivilent to
# [1, 4, 5]
# 在Numpy中使用dot来计算内积
#dot可以作为数组对象的实例方法
# 在Numpy中使用dot来计算内积
#dot可以作为数组对象的实例方法
x = np.array([[1,2],[3,4]])
y = np.array([[5,6],[7,8]])
v = np.array([9,10])
w = np.array([11,12])
# 向量内积都将生成219
print(v.dot(w))
print(np.dot(v,w))
print(np.dot(x,v))
print(np.dot(x,y))
print(np.sum(x))
print(np.sum(x,axis=0))#列
print(np.sum(x,axis=1))#行
# 转置是T
# 219
# 219
# [29 67]
# [[19 22]
# [43 50]]
# 10
# [4 6]
# [3 7]
NOTE:
print(np.sum(x,axis=0))#列
print(np.sum(x,axis=1))#行
Python 中的广播机制
广播机制提供了强大的功能,从而能语序Numpy在不同形状的数组中执行数学操作,我们经常会遇到小数组和大数组想成的情况,比兔图片数据矩阵与权重矩阵,利用广播机制可以提高代码的质量与运算效率,例如在矩阵的每一行中都加上一个常数向量,可以按照以下代码进行操作:
# 广播机制
import numpy as np
#矩阵的每一行加上向量v将结果保存在矩阵y中
x = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
v = np.array([1,0,1])
y = np.empty_like(x)#创建一个与想形状相同的空矩阵。
#使用显式的循环完成上述操作。
for i in range(4):
y[i,:]=x[i,:]+v
print(y)
# [[ 2 2 4]
# [ 5 5 7]
# [ 8 8 10]
# [11 11 13]]
# 这样的操作是可行的,但是如果x变得特别大,用显式的循环特别耗时间
# 于是乎就有以下这种操作
# 操作的本质是将向量v拷贝多次后,垂直堆叠形成矩阵vv
# 然后对矩阵x与矩阵vv进行按照元素求和的操作
# 也可以实现同样的效果
# 这样的操作是可行的,但是如果x变得特别大,用显式的循环特别耗时间
# 于是乎就有以下这种操作
# 操作的本质是将向量v拷贝多次后,垂直堆叠形成矩阵vv
# 然后对矩阵x与矩阵vv进行按照元素求和的操作
# 也可以实现同样的效果
vv = np.tile(v,(4,1))#拷贝4次向量v堆叠起来
print(vv)
# [[1 0 1]
# [1 0 1]
# [1 0 1]
# [1 0 1]]
#不需要过多的修饰,直接是两个np类型的对象加起来
# 里面就已经因含有广播机制了:
x = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
v = np.array([1,0,1])
y = x+v
#Numpy的广播机制允许我们在不出按键多次向量v的备份的情况下执行该计算
# 如下列代码所示
import numpy as np
x = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
v = np.array([1,0,1])
y = x+v
#不需要过多的修饰,直接是两个np类型的对象加起来
# 里面就已经因含有广播机制了
print (y)
# [[ 2 2 4]
# [ 5 5 7]
# [ 8 8 10]
# [11 11 13]]
# Python绘图工具 Matplotlib
# 使用以下命令*********可以将绘图结果嵌入到notebook中来:
%matplotlib inline
# Python绘图工具 Matplotlib
import matplotlib.pyplot as plt
# 使用以下命令*********可以将绘图结果嵌入到notebook中来:
%matplotlib inline
# 绘制
x = np.arange(0,3*np.pi,0.1)
y_sin = np.sin(x)
# 使用pyplot绘制坐标点
y_cos = np.cos(x)
plt.plot(x,y_sin,x,y_cos)
# 添加标题等内容
plt.xlabel('x axis label')
plt.ylabel('y axis label')
plt.title('sin and cos' story ')
plt.grid()
plt.legend(['sine','cosine'])
绘制子图
# 绘制子图
plt.subplot(2,1,1)
# 绘制
x = np.arange(0,3*np.pi,0.1)
y_sin = np.sin(x)
# 使用pyplot绘制坐标点
y_cos = np.cos(x)
plt.plot(x,y_sin,x,y_cos)
# 添加标题等内容
plt.xlabel('x axis label')
plt.ylabel('y axis label')
plt.title('sin and cos' story ')
plt.grid()
plt.legend(['sine','cosine'])
plt.subplot(2,1,2)
# 绘制
x = np.arange(0,3*np.pi,0.1)
y_sin = np.sin(x)
# 使用pyplot绘制坐标点
plt.plot(x,y_sin)
# 添加标题等内容
plt.xlabel('x axis label')
plt.ylabel('y axis label')
plt.title('sin')
plt.grid()
plt.legend(['sine'])
最后
以上就是忧虑老虎为你收集整理的机器学习实战1:python基础(个人笔记)的全部内容,希望文章能够帮你解决机器学习实战1:python基础(个人笔记)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复