机器学习基础知识笔记
1. 三元表达式
# 三元表达式 a > b ? a : b
a = 1
b = 2
print(a if a > b else b)
得到的返回值会是2。
2. 字典
# 字典结构 (key1: value1; key2: value) JSON
import json
# 定义字典
dict1 = {'name': 'wanghong', 'age': 18, 'money': 100000000000.10001}
print(dict1['name'])
# 字典的本质是dict类的对象
dict2 = dict() # dict2 = {}
dict2['score'] = 100
print(dict2)
# 字典常用的函数, 以下三种返回都是列表形式
print(dict1.items())
print(dict1.keys())
print(dict1.values())
# 字典删除函数,pop返回的是key对应的value值
item = dict1.pop('age')
print(item)
print(dict1)
# 注意,dict健壮性不是很好,当访问dict不存在的元素时会直接报错
# 为了改善这种情况,在使用字典时使用如下格式
value = dict1.get('age')
print(value)
# 如果存在
print(dict1.get('name'))
get()方法就是存在key值返回value,不存在返回None。
# 字典的嵌套
dict3 = {'user': {'name': 'zhangsan', 'age': '18'}, 'hobby': {'打篮球', '游泳馆'}}
print(dict3)
3. Set
# set集合结构,与数学意义上的set一致
set1 = {1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 9}
print(set1)
set2 = {2, 3, 4, 7, 10}
# 求交集、并集、差
print(set1 & set2)
print(set1 | set2)
print(set1 - set2)
# 删除元素
set1.remove(9) # 没有元素会报错
set1.discard(9) # 没有元素不会报错
# 添加元素
set1.add(11)
4. 运算
import numpy as np
import math
# 求幂
x = 2**10
print(x)
print(2**0.5)
print(np.sqrt(2))
print(math.sqrt(2)) # math的性能不如numpy好,所以一般情况会使用numpy
# 整除
print(10//3) # 省略余数
# 幂赋值运算符
a = 2
a **= 10 # == a**10
print(a)
5. 异或运算
# 位运算符
a = 12
b = 8
# 结果为4, 二进制每一位做与操作,为异或运算符,对位相异为1
res = a ^ b
print(res)
6. 逻辑运算
# 逻辑运算
a = 1
b = 2
if a > 1 or b < 3: # ||
pass
if a > 1 and b < 3: # &&
pass
# not ,布尔非,如果x为True,返回False;如果x为False,返回True
7. 身份运算符(比较内存)
- is 是判断两个标识符是不是引用自同一个对象
- is not 是判断两个标识符是不是引用自不同对象
8. 数据缓存池
a = 1
b = 2
print(id(a), id(b))
print(a is b)
# lisit1 和 list2是同一块内存空间
list1 = [1,2,3,4,5,6]
list2 = list1
print(id(list1), id(list2))
print(list1 is list2)
# list3 是一个新的对象
list3 = list1[:]
print(id(list1), id(list3))
print(list1 is list3)
# 数据缓存池 类似 连接池
a = 1
b = 1
print(a is b)
# a和b应该是两个不同的对象,但是a和b实际上存储在同一个内存的地址下
# Python 在创建变量时,会先在数据缓存池中去寻找是否有相同的对象
# 而不是每次遇到新变量就去开辟空间,这种机制可以节省内存和提高程序运行效率
# 对于字符串,也可以进行相同的处理
name = 'hello'
name1 = 'hello'
print(name is name1)
9. Python中函数
- 求和函数实例
def calSum(a, b): # 无数据类型约束, 执行效率差
return a + b
pass
result = calSum(10, 20)
print(result)
result = calSum(10.0, 10.0)
print(result)
result = calSum('hello, ', 'world!')
print(result)
result = calSum([1, 2, 3], [4, 5, 6])
print(result)
Python函数可以返回多个结果:
# Python函数可以返回多个结果
def calSum(a,b):
return a + b, a - b, a * b, a / b, a % b, a // b
pass
r1, r2, r3, r4, r5, r6 = calSum(10, 20)
print(r1, r2, r3, r4, r5, r6)
# 当使用一个变量去接收函数的结果,会返回这多个结果封装成的元组
result = calSum(10, 20)
print(result)
print(result[0])
- 函数的参数
# Python函数的参数形式多样化
# name必备参数(没有就错误),*args默认参数,age=10是带默认值的参数, **不定长参数,可以传n个,也可以传字典
def eat(name, *args, age = 10, **kw):
print(name)
print(args)
print(age)
print(kw)
pass
eat("二哈", "3", "骨头", "哈哈", age = 10, w = 100, s = 1000, h = 'play')
# w = 100, s = 1000, h = 'play'被封装成字典
# "3", "骨头", "哈哈" 被封装成元组
- lambda 与高阶函数
# 补充lambda表达式 是一个匿名函数, 高阶函数
# 如果x>y,返回x**2,否则,返回y+1
func2 = lambda x, y : x**2 if x > y else y**2
result = func2(10, 20)
print(result)
# 只能写一行代码,多行代码无法识别
func2 = lambda name, *args, age = 10, **kw : print(name, args, age, kw)
func2("二哈", "3", "骨头", "哈哈", age = 10, w = 100, s = 1000, h = 'play')
# 高阶函数, 在Python中,函数可以作为参数传递
def func(a, b, f): # f是其他函数
r = f(a, b)
return r**2
pass
def func2(a, b):
return a + b
pass
result = func(10, 20, func2)
print(result)
result2 = func(10, 20, lambda x, y : x - y)
print(result2)
- filter(), 前面是过滤条件
# filter
result = filter(lambda x : x > 0, [-20, -10, 10, 20, 100])
print(list(result))
# map
result = map(lambda x : x**2, [-20, -10, 10, 20, 100])
print(list(result))
# reduce
from functools import reduce
result = reduce(lambda value, el: value + el, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) # 累计和
print(result)