深度学习之python基础
文章目录
本篇文章是作者为了学习深度学习而写的关于python的笔记,比较简单,偏向科学计算。
1.环境配置
环境配置这里我是下载了anaconda.anaconda是python 的一种发行版本。简单来说,下载了anaconda就等于下载了python以及其与科学计算相关的包,并且还能够创建,管理python虚拟环境。
其包括:
- python 解释器
- numpy、matplotlib、scipy、scikit-learn等一系列包
- conda: python环境管理器
1.1 anaconda 下载
下载安装以及简单的使用参考了这篇文章。
anaconda下载及安装(保姆级教程) - 知乎 (zhihu.com)
2. python基础知识
查看python版本
!python --version
简单的算术运算
#注释
1+2+3
# out:6
2*3
# out:6
3**3
# out:27
6/2
# out:3.0
6//2
# out:3
查看数据类型
type(6/2)
# out:float
type(6//2)
# out:int
type('hello world')
# out:str
变量
x = 10 # int
print(type(x))
# out: <class 'int'>
y = 100
z = 3.14
print(x+y*z)
print(type(x+y*z))
# out: 324.0
# out: float
python 为 “弱类型语言” ,“弱类型语言”是一种弱类型定义的语言,某一个变量被定义类型,该变量可以根据环境变化自动进行转换,不需要经过显性强制转换。
如上述代码中所示:用户并未显式指出x的数据类型为int(整型),但python根据x被初始化为10,从而判断它为整形的。
另外在上面的计算中,数据类型发生了自动转换,即整数与浮点数相乘返回的是浮点数。
数据结构(一)列表
python中列表可以理解为一个顺序存储的线性表。
List(列表) 是 Python 中使用最频繁的数据类型。
列表可以完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至可以包含列表(即嵌套)。
列表用 [ ] 标识,是 python 最通用的复合数据类型。
(1)初始化
List = [] #
List = list() # list 内可放一个序列,可以为空
(2)增
List.append('a')
# List: ['a']
(3)删
#1. 根据索引删除元素
del List[0]
#out: List:[]
#2. 删除一段连续的元素
List = [0,1,2,3,4,5]
del List[1:3]
#out: List:[0,4,5]
(4)改
# 根据索引更改元素的值
List[0] = 1
# out:List:[1,4,5]
(5)切片
List[0:2] # [1,4]
List[:2] # [1,4]
List[1:] # [4,5]
列表中元素的访问是以a[0]这样的方式进行的。[]中的数字称为索引或是下标。并且python中的列表可以通过切片这一方法截取列表的某连续部分。
List[-1]
List[:-1]
List[::-1] # 逆序
# out: 5
# [1,4]
# [5,4,1]
索引 "-i"代表倒数第i个元素。
数据结构(二)字典
# 初始化,其每个元素为 key-value结构
d = {"a":1,
"b":2,
"c":3}
# 访问并修改某个key的值
d["a"] = 2
# 列出对象的所有属性和方法
dir(d)
布尔类型
yes = True #真
no = False # 假
if 语句
hungry = yes
if hungry == yes:
print(" I`m hungry")
else:
print(" I`m not hungry")
缩进
python使用空白字符表示缩进。一般而言,没缩进一次,使用4个空白字符。python 使用缩进来表示代码块的开始和结束。
for 语句
for step in range(100):
print(step,end = ' ')
函数
def Hello(object):
print('hello',object)
Hello('Lee')
# out: hello,Lee
类
class Man:
""""示例类""" # 示例类
def __init__(self,name):
self.name = name
print("初始化成功")
def Hello(self):
print("hello,",self.name + '!')
def Goofbye(self):
print("Goofbye,",self.name + '!')
m = Man('lee')
m.Hello()
m.Goodbye()
print(type(m))
这里有一个特殊的init方法,是该类的构造函数,只在生成类的实例时调用一次。此外,在python的类中的每个方法的第一个参数都必须为self,指代类本身,使用上类似于c的this指针。
3.Numpy包
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliphant 在 Numeric 中结合了另一个同性质的程序库 Numarray 的特色,并加入了其它扩展而开发了 NumPy。NumPy 为开放源代码并且由许多协作者共同维护开发。
NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:
- 一个强大的N维数组对象 ndarray
- 广播功能函数
- 整合 C/C++/Fortran 代码的工具
- 线性代数、傅里叶变换、随机数生成等功能
数组
import numpy as np #导入numpy包并命名为np,方便使用
# 从已有数据中创建数组
x = np.array([1.0,2.0,3.0])
print(x)
print(type(x))
要生成NumPy数组,需要使用np.array()方法。np.array()接收Python列表作为参数,生成NumPy数组(numpy.ndarray)
小技巧:
1.运行 np.array? 可查看函数array的详细信息
2.输入np. 然后按Tab键,将出现可用方法和属性
使用random模块生成数组
np.random 模块的常用函数
# 1.三维随机数组
nd3 = np.random.random([3,3])
# 2.计算机中的随机数生成函数,生成的是伪随机数。
## 大致可以理解为一个 random()函数输入一个随机种子seed(某个数字)。再经过一系列复杂的计算生成一个数字random
## 所以我们可以设置一定的随机种子时,输出的随机数是一致的。
np.random.seed(123)
a1 = np.random.randn((3,3))
## 可以将生成的随机数,再加一次随机打乱,提高生成数组的熵(随机性)
a1_random = np.random.shuffle(a1)
创建特定的多维数组
import numpy as np
## 输入为数组形状
# 1.元素全为0的三维数组
np.zeros((3,3))
# 2.元素全为1的三维数组
np.ones((3,3))
# 3.空的多维数组。空数组中的值不是0,而是未初始化的垃圾值
np.empty((3,3))
## 输入为某个已存在的数组,并以他的形状创建新的数组
a1 = np.empty((3,3))
np.zeros_like(a1)
np.ones_like(a1)
np.empty_like(a1)
## 生成特殊矩阵
# 1.单位矩阵
np.eye(3) # 三阶单位矩阵、
# 2.对角矩阵
np.diag([1,2,3])
# 1 0 0
# 0 2 0
# 0 0 3
## 生成全为某个数的矩阵
np.full((3,3),6)
生成有规律的一维数组(向量)
# 1.生成[start,end)范围内的,由start 开始的大小为n的等距数组,距离可修改step的值更改
np.arange(start = 0,end = 10,step = 1)
# [0,1,2,3,4,5,6,7,8,9]
# 2.生成一个线性等分向量 范围[start,end]
np.linspace(start = 0.1,end = 1 ,num = 10) # 即将[0,1]9等分
# 3.对数等比数列
np.logspace(0.1,1,10,base = 10)
numpy数组数据与本地 的 读写
import numpy as np
nd = np.random.ranint((3,3))
# 保存
np.savetxt(X=nd,fname = './test.txt')
# 加载
np.loadtxt('./test.txt')
访问元素
X = np.array([[0,1],[2,3],[4,5]])
#1.下标访问
X
# [[0,1],
# [2,3],
# [4,5]]
X[0] # [0,1]
X[1] # [2,3]
X[0 1] #0
X[0][1] #0
#2. 迭代访问
for row in X:
print(row)
# [0,1]
# [2,3]
# [4,5]
Numpy数组的一些操作
#1.将数组展开成一维数组
Y = X.flatten()
# Y:[0 1 2 3 4 5]
#2.交换数组的行
X[np.array([2,1,0])]
# [[4,5],
# [2,3],
# [0,1]]
#3. 布尔型数组
Y > 10
#[false,false,false,false,false,false]
4. 取出满足一定条件的数组
Y[Y>2]
#[3,4,5]