Anaconda

命令行操作

# 查看conda的版本
conda -v
# 更新conda
conda update conda
# 查看conda的虚拟环境
conda env list
# 创建虚拟环境 xxx:需要自己定义,版本号例如3.8、3.9
conda create -n xxx python=版本号
# 激活环境,xxx就是前面自己定义的名字
conda activate xxx
# 退出环境
conda deactivate
# 列出当前环境conda安装的包
conda list
# 使用conda安装包,xxx代表包的名字
conda install xxx
# 删除包,xxx代表包名
conda uninstall xxx
# 删除虚拟环境,需要先退出要删除的环境
conda remove -n xxx --all

Jupyter

简单使用

快捷键:

  • shift + enter :执行,并定位到下一个cell
  • alt + enter :执行,并在当前cell下添加一个新的空白cell,并定位到这个新的cell
  • 选中cell + shift + L :添加/删除行号
  • 选中cell + B:下面添加一行
  • 选中cell + M :进入Markdown模式
  • 选中cell + C :进入Code模式
  • 选中cell + D,D :删除当前cell

动手实践:

点击单元格 ---> 按M(进入Markdown模式, 按Y进入Code模式)----> 执行(shift + enter)

高级使用

常用的魔法命令

  • %%writefile
  • %pycat
  • % run
  • %timeit
  • %%timeit
  • %time
  • %whos
  • %lsmagic

动手实践:

%%writefile test.py
# 写入test.py文件内容,没有test.py文件会创建这个文件
def Test(name):
    print("Test",name,"sucess")


# 显示test.py中的内容
%pycat test.py

# 执行python代码
%run test.py
Test("Jupyter")

# 评估后面运行代码的耗时,并不是执行一次
%timeit data = [x * x for x in range(1000)]

%%timeit
# 评估整个cell的执行耗时,并不是执行一次
import time
time.sleep(0.5)

# 评估后面运行代码的耗时,仅执行一次
%time data = [x * x for x in range(1000)]

%%time
# 评估整个cell的执行耗时,仅执行一次
import time
time.sleep(0.5)


# 将前面定义的内容都打印出来
%whos

# 查看更多的魔法命令
%lsmagic

Numpy

导入Numpy

import numpy as np

Numpy与原生Python的性能对比

问题:数组x是由 1-n 数字组成,求数组x中所有数的平方之和(n自定义)

Python实现
%%timeit
x = [i for i in range(n+1)]
sum_x =0 
for i in x:
    sum_x += i**2
sum_x

Numpy实现
%%timeit
x = np.arange(n+1)
sum_x = np.sum(x**2)
sum_x

Numpy的ndarray及其创建

创建Numpy数组
a = np.array([1,2,3,4,5,6])
a

A = np.array(
    [
        [1,2,3],
        [4,5,6]
    ]
)
A
Numpy数组的属性
#维度
a.ndim

# 数组的形状
a.shape

# 数组中元素的个数
a.size

# 数组中元素的类型
a.dtype
创建数组的函数
  • ones
  • zeros
  • empty
  • full
  • arange
  • linspace
# ones
# 创建元素全是一的数组
np.ones(8)   
# 默认创建的为float类型
np.ones(8).dtype
# 可以指定类型
np.ones(8,dtype='int64')
np.ones(shape=(2,4))
# 创建形状与A相同的数字
np.ones_like(A)

# zeros
np.zeros(8)
np.zeros(shape=(2,4))
np.zeros_like(A)

# full
# 指定数组的元素
np.full(8,66)
np.full((2,4),66)
# np.full(shape=(2, 4), fill_value=66)  
np.full_like(A,66)

# empty
# 结果这里并不是全是0.是一个无限接近于0,是一个随机值并没有初始化
np.empty(8)
np.empty((2,4))
np.empty_like(A)

# arange
np.arange(10)
# 1:起始值 ,10:结束(不包含) ,2:步长
np.arange(1,10,2)
np.arange(10).reshape(2,5)

# linspace
# 创建等差数组
# 0:起始值,10:结束(包含) 5:在这个范围内一共生成5个数
np.linspace(0,10,5)
random模块
  • random
  • rand
  • randint
  • seed
  • randn
  • normal
  • uniform
# random
# 生成一个0-1之前的随机数,不包含1
np.random.random()
# 生成5个0-1之前的随机数
np.random.random(5)
np.random.random((2,4))

# rand
np.random.rand()
np.random.rand(5)
# 用法和random类似,但是这里没有添加括号
np.random.rand(2,4)
np.random.rand(2,3,4)

# randint
# 返回一个0-5之间的随机数,不包含5
np.random.randint(5)
# 返回一个5-10之间的随机数,不包含10
np.random.randint(5,10)
# 返回8个5-10之间的随机数
np.random.randint(5,10,size=8)
np.random.randint(5,10,size=(2,4))

# seed
# 因为使用随机数每次生成的值都是不一样的,不利于调试,所以使用随机种子
np.random.seed(666)
np.random.randint(5,10,size=(2,4))

# randn
# 返回具有标准正态分布的随机数
np.random.randn(5)
np.random.randn(2,4)

# normal
# 可以设置均值与方差,生成高斯分布的随机数据
# 返回一个随机数
np.random.normal()
# 设置均值为10,标准差为1000,生成数量20
np.random.normal(10,1000,20)
np.random.normal(10,1000,size=(4,6))

# uniform
# 返回具有均匀分布的随机数据
# 生成0-1之间的随机数据,不包含1
np.random.uniform()
# 生成1-5之间的随机数据,不包含5
np.random.uniform(1,5)
# 传入元组数据,生成3行4列的数据
np.random.uniform(1,5,(3,4))

# 查看uniform具有的功能(uniform可以替换为其他的方法)
np.random.uniform?

Numpy数组的基础索引

一维数组
import numpy as np
# 一维数组,也看作:向量
# 一般用小写字母表示
a = np.arange(10)
a[0]
# 取出第4个元素后面的数据
a[4:]
# 取出倒数三个元素
a[-3:]
# 取出全部元素
a[:]
# 倒序输出
a[::-1]
# 设置步长
a[::2]
二维数组
import numpy as np
# 二维数组,看作是:矩阵
# 一般用大写字母表示
A = np.arange(20).reshape(4,5)
# 取第一行的所有值
A[0,:]   
# 取出最后一行的所有值
A[-1]
# 取矩阵第一列的元素
A[:,0]
# 取最后一列元素
A[:,-1]
# 将所有的行、列倒序
A[::-1,::-1]
# Numpy中的切片操作会对原始数据进行修改
# 避免一方修改,原数据也发生变化,使用copy()方法实现复制操作
X = A[:2,:3].copy()
X

Numpy数组的合并和拆分

数组的合并

concatenate()方法:使用该方法要保证合并的数组的维度是相同的,默认垂直方向上的合并

import numpy as np

X = np.arange(12).reshape(3,4)
X

a = np.array([6,6,6,6])
a

# 此时会报错,因为X和a的维度并不相同,使用该方法要保证合并的数据维度相同
np.concatenate(X,a)

# 执行X,a本身并不会发生改变,要注意括号
A = np.concatenate((X,a.reshape(1,4)))
A

vstack()方法:实现竖直方向的合并

# 在竖直方向上合并
np.vstack((X,a))

hstack()方法:实现水平方向的合并

# 在水平方向上合并
# 需要创建一个和X行数相同的数组
B = np.full((3,2),6)
B
np.hstack((X,B))

concatenate()实现hstack()方法的功能

# axis:在那个维度上进行操作,axis=0在行这个维度进行操作,axis=1在列这个维度进行操作
np.concatenate((X,B),axis=1)
数组的拆分

split():

# split():第一个参数是要拆分的数组,第二个是需要拆分的索引
# 默认按行进行拆分
np.split(X,[-1])

vsplit():

# 在竖直方向上拆分,第一个参数表示要拆分的数组,第二个表示从哪个点拆分(索引)
# 这里要拆出最后一行:[0:2]  [2:]
np.vsplit(X,[2])

hsplit():

# 水平方向的拆分
# [0:1]  [1:3] [3:]
np.hsplit(X,[1,3])

Numpy数组的运算

一元运算
X = np.arange(1,11,0.5).reshape(4,5)
# 取绝对值
np.abs(X)
# 开方
np.sqrt(X)
# 平方
np.square(X)
# 指数
np.exp(X)
# 对数
np.log(X)
# 向上取整
np.ceil(X)
# 向下取整
np.floor(X)
# 四舍五入,奇进偶不进,1.5-->2  2.5-->2
np.round(X)
二元运算
X + 1
np.add(X,1)
X - 1
X *2 
X**3
矩阵运算
X = np.linspace(10,40,4).reshape(2,2)
Y = np.linspace(1,4,4).reshape(2,2)
X + Y
# 对应位置的元素相乘
X * Y
# 矩阵相乘
X.dot(Y)
# 转置
X.T
# 逆矩阵
V = np.linalg.inv(X)
# 得到单位矩阵
X.dot(V)

更多推荐