项目实训写实记录No.1
Python环境配置(Anaconda+Pycharm)
1. 安装anaconda
下载:
清华镜像下载: link
找到自己需要的版本下载到本地一路next安装
2.增加Anaconda中国镜像
Cmd中输入命令 conda config --set show_channel_urls yes
生成用户目录下的.condarc文件
使用记事本打开,添加内容
channels:
- defaults
show_channel_urls: true
channel_alias: https://mirrors.tuna.tsinghua.edu.cn/anaconda
default_channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
3.创建虚拟环境
cmd命令行中输入:conda create -n 环境名称 python=python版本
4.安装模块库
conda install 库名
numpy库使用
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
使用前需要下载并导入numpy
1.创建数组
分别创建下列形式的一维数组:
[3 6 5 2 7]
[0. 0. 0. 0. 0.]
[1. 1. 1. 1. 1.]
[3. 3. 3. 3. 3.]
- 使用array方法直接初始化数组元素
- 使用zeros, ones, full方法
- 注意数组中每个元素默认的数据类型
import numpy as np
a1 = np.array([3, 6, 5, 2, 7])
size = 5
a2 = np.zeros(size)
a3 = np.ones(size)
a4 = np.full(size, 3.0)
通过下列代码将list(可以是一维,也可以是多维)转换成array:
a2 = [1,2,3,4,5]
a2 = np.array(a1)
使用区域分割方法生成序列
arange 提供了根据指定范围 (min, max) 和间隔 (step) 来生成序列的方法
- arange 中指定范围时,序列中将包含左侧边界值(最小值),不包含右侧边界值(最大值),也即:[min, max)
a3 = np.arange(1, 20, 2)
已知:
a1 = np.array([1,2,3,4,5])
a2 = a1
a1[0] = 100
则此时a2[0]=?
- *=*运算符将使等号左右两边的数组变量指向同一块数据内存
- copyto,copy,array函数都将产生一个新的数据块拷贝,这将导致即使修改了原始数组数据(a1),也不会影响新数组中的数据(a2,a3,a4)
2.数组维度
与数组维度和大小有关的函数和属性
- len函数总是返回数组第一个维度的大小
- shape属性返回数组每个维度的大小,使用一个tuple来代表;对于一维数组,shape属性仅记录了一个维度大小
- size属性用于记录元素总个数
- itemsize属性记录了每个元素所占字节数
使用正数下标索引访问一维数组中的元素
数组元素:[0 10 20 30 40 50 60 70 80 90]
↓ \downarrow ↓ ↓ \downarrow ↓ ↓ \downarrow ↓ ↓ \downarrow ↓ ↓ \downarrow ↓ ↓ \downarrow ↓ ↓ \downarrow ↓ ↓ \downarrow ↓ ↓ \downarrow ↓ ↓ \downarrow ↓
下标索引: 0 1 2 3 4 5 6 7 8 9
- 下标索引从 0 0 0开始编号
- 使用 [start🔚step] 的形式从数组中取出部分元素(切片):从下标为 start 的元素开始,到下标为 end-1 的元素结束,每次移动 step 个元素
- 如果不明确指定 start , end 和 step,则 s t a r t = 0 start=0 start=0, e n d = l e n ( a ) end=len(a) end=len(a), s t e p = 1 step=1 step=1
访问二维数组/矩阵中的部分数据(切片)
- 行、列下标可以采用与一维数组类似的方式进行处理
- 如果最终的切片结果只有一行或一列,则该结果将被转成一个一维数组
a= np.array([[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]])
print(a[0:2,2:5]) # 行下标0,1行,列下标2,3,4列
print(a[:, 2:5]) # 行下标所有行,列下标2,3,4列
print(a[:,3]) # 行下标所有行,列下标为3的列。注意,因为最终只返回了1列,因此该列数据被转换成一维数组
print(a[1,:]) # 行下标为1的行,列下标所有列。注意,因为最终只返回了1行,因此改行数据被转换成一维数组
print(a[1]) # 如果省略了列维度,则默认取所有列
3.数组元素筛选
3.1直接给定下标索引
a = np.array([4, 3, 5, 7, 6, 8])
indices = [0, 1, 4] # 指定返回索引为0,1,4的三个元素
b = np.take(a, indices)
c = a[indices] # a[[0,1,4]]
3.2基于元素值间接给定下标索引
b = np.nonzero(a) # 非零元素的索引组成的一维数组
c = np.where(a>0)
3.3基于True/False条件返回对应的元素
a = np.arange(5) # [0,1,2,3,4]
b = np.array([True, False, False, True, True])
print(a[b])
4 数组元素查找与统计
4.1数组极值
一维数组极值
- np.max和np.min用于查找最大值和最小值
- np.argmax和np.argmax用于查找极值元素对应的下标索引
二维数组极值
- 设置axis=0,表示沿着竖直方向(行索引增长的方向),为每一列分别查找极值(一维数组,长度为原二维数组列数)
- 设置axis=1,表示沿着水平方向(列索引增长的方向),为每一行分别查找极值(一维数组,长度为原二维数组行数)
- 不设置axis时,将查找整个数组中的极值元素(单个值,标量)
统计一维和二维数组中的非零元素个数
- np.count_nonzero
- 通过设置axis参数,可以计算每列或每行的非零元素个数
5.数组排序
5.1一维数组排序
升序和降序排列
- sort只能升序排列,如果需要降序,可以再倒序
5.2二维数组排序
按行或案列排序
- 指定axis=0,表示沿竖直方向(行索引增加的方向),对每一列分别排序
- 指定axis=1,表示沿水平方向(列索引增加的方向),对每一行分别排序
- 未指定axis时,行为等同于axis=1
6数组元素增删
使用np.delete删除一维数组中的元素
- 删除指定索引位置处的元素
- 可以删除一个或多个位置处的元素。如果是删除多个位置,则这些位置是参照原始数组(而不是删除了某个元素之后的数组)的位置
- 删除后的数组是原始数组的拷贝,不会共享数据内存
删除二维数组中的元素
- 如果不指定axis,则将二维数组展成一维数组,然后删除指定位置的元素。返回的数组已经变成了一维数组
- 设置axis=0,表示沿竖直方向(行索引增加方向)删除指定索引位置的元素,此时实际上删除的是一行
- 设置axis=1,表示沿水平方向(列索引增加方向)删除指定索引位置的元素,此时实际上删除的是一列
在一维数组末尾追加元素
- np.append方法
- 可以追加1个或多个元素
- 追加操作不会修改原来的数组,而是拷贝生成一个新数组
二维数组末尾追加元素
- 如果不指定axis,则将二维数组展成一维数组,并在最后追加数据
- 设置axis=0,可追加行。应确保追加的数据与原始数据具有相同的列数
- 设置axis=1,可追加列。应确保追加的数据与原始数据具有相同的行数
7.数组拼接与拆分
- np.concatenate函数,通过指定axis=0,将两个数组沿竖直方向(行索引增长的方向)组合拼接
- np.vstack函数。按照竖直(vertical)方向拼接
- 将要拼接的数组放在一个tuple中,并且这些数组应具有相同的列数
- 支持多个数组的拼接
- 拼接后的数组与原来的数组不共享数据内存
- np.concatenate函数,通过指定axis=1,将两个数组沿水平方向(列索引增长的方向)组合拼接
- np.hstack函数。按照水平(horizontal)方向拼接
- 拼接的数组应具有相同的行数