可视计算与交互概论 notes整理第1-4章
第一章 引言
可视计算 (visual computing) 是针对视觉内容生成与处理的所有计算机科学分支的总称,是由计算机图形学、计算机视觉等多个学科间越来越广泛的交叉而产生的交叉领域或学科。它涉及到的学科或领域有计算机图形学、图像处理、可视化、计算机视觉、虚拟现实和增强现实以及视频处理。同时,可视计算还包括模式识别、人机交互、机器学习和数字图书馆等方面。
计算机图形学的主要研究内容
计算机图形学主要研究三个课题:
建模:三维模型建模方法是计算机图形学的重要基础,它研究如何在计算机中表示物体以及如何建立这些表示。在对几何进行表示时,我们可以使用样条函数来表示曲线,用网格、样条函数、细分曲面等来表示表面,用网格 (mesh)、构造实体几何(Constructive Solid Geometry, CSG)、二进制空间划分(Binary SpacePartitioning, BSP) 等来表示立体图形。
渲染:渲染是在计算机中模拟图像的形成过程。在得到 3D 模型及场景之后,要使其能够被直观地观看,就需要将虚拟的 3D 物体和场景,通过设置虚拟的相机、光照参数等,最终转换为 2D 图片 ...
数据结构与算法A 第四章字符串
字符串的基本概念
字符串是组成元素(结点)为单个字符(数字、文本字符或特定的符号)的线性表,简称“串”
字符串所包含的字符个数成为串的长度。空串:长度为零的串“”;空格串:“ ”
字符串的逻辑结构和线性表逻辑结构的区别:
字符串的数据对象约束为字符集
字符串的基本操作通常以“串的整体”为操作对象
字符串常数:用一对双撇号“xxxx”作为左右括号,中间字符个数有限
字符编码
字符类型是单字节(8 bits)类型
采用ASCII码对128个符号(字符集charset)进行编码
通用文字符号编码标准UNICODE
字符的编码顺序
字符编码表一般遵循“偏序编码规则”:根据字符的自然含义编码,使字符集中的编码顺序和其自然次序一致
字符偏序:根据字符的自然含义,某些字符间两两可以比较次序
encode()是符号的ASCII编码(序号)的映射函数
对于字母而言,大小次序就是按照字典编目次序。e.g. “monday”<”sunday”<”tuesday”.”123”<”1234”<”23”
字符串ADT
子串:s1 = a0a1a2 ...
Deep Learning with PyTorch: A 60 Minute Blitz 自学笔记
Tensor
张量是一种特殊的数据结构,与数组和矩阵非常相似。在PyTorch中,我们使用张量对模型的输入和输出以及模型的参数进行编码
张量类似于NumPy的ndarray,除了张量可以在GPU或其他专用硬件上运行以加速计算
12import torchimport numpy as np
Tensor Initialization
张量可以通过多种方式初始化
张量可以直接从数据中创建。数据类型是自动推断的。torch.tensor(data) 12data = [[1, 2], [3, 4]]x_data = torch.tensor(data)
张量可以从NumPy中的arrays创建,反之亦然。torch.from_numpy(np_array) 12np_array = np.array(data)x_np = torch.from_numpy(np_array)
从另一个张量,新张量将保留参数张量的属性(形状、数据类型)。torch.ones_like(tensor,type) & torch.rand_like(tensor,type) 1234567 ...
数据结构与算法A 第三章栈与队列
栈和队列是典型的线性结构,常被称为“操作受限的线性表”或“限制存取点的线性表”
栈
栈是一种限定仅在限制在一端进行插入和删除的线性表,无论是插入元素还是删除读取栈中的元素,都只能固定在线性表的一断进行。这一端被称为栈顶(top),另一端叫做栈底(bottom)
最后插入栈中的元素是最先被删除或读取的元素,而最先压入的元素则被放在栈的底部。栈的修改是按后进先出的原则进行(Last-In First-Out,LIFO),也称“下推表”
push操作:往栈中插入元素,简称压栈或入栈;pop操作:删除栈顶元素,简称出栈或弹出
栈的ADT1234567891011template <class T> // 栈的元素类型为 Tclass Stack { public: // 栈的运算集 void clear(); // 变为空栈 bool push(const T item); // item入栈,成功则返回真,否则返回假 bool pop(T & item); // 返回 ...
AI中的编程 Parallel Communication
GPU HardwareThread Blocks And GPU Hardware
一个thread对应GPU核,tread block对应SM(Streaming Multiprocessor),而一个grid对应若干个SM
A thread block contains many threads
A thread block must be on one SM; a SM may run more than one block
The programmer is responsible for defining blocks
The GPU is responsible for allocating thread blocks to hardware SMs
The threads run in parallel, and CUDA makes few guarantees about when and where thread blocks will run.thread block间的运行是并行的,无约束的
A Thread-Block Programming ...
数据结构与算法A 第二章线性表
线性表的概念线性表的抽象数据类型
线性表的定义:线性表(简称为表)是零个或多个元素的有穷序列L=(k0,k1,…,kn-1);线性表是由称为元素的数据项组成的一种有限且有序的序列,这些元素也称为结点或表目
线性表的逻辑结构:L=<K,R>其中,K={k0,k1,…,kn-1},R={r:线性关系}。
i称为ki的索引或下表。所含元素的个数称为表的长度。长度为0的表称为空表。k0是第一个元素kn-1是最后一个元素。ki是ki+1的前驱,ki+1是ki的后继
唯一开始的结点:没有前驱;唯一终止的结点:没有后继。内部节点:有唯一的直接前驱也有一个唯一的直接后继
线性表的关系r是前驱关系,应具有反对称性和传递性
要求:
内部结点具有相同的数据类型
每个元素都有自己的位置[0,n-1]
在线性表上实施的操作:
对整个表的操作:创建或置空一个线性表、合并两个线性表、判断线性表是否为空或满
对表中元素的操作:查找线性表中满足一定条件的元素、在线性表中插入或删除指定元素
线性表ADT:
123456789101112131415 ...
数据结构与算法A 第一章概论
数据结构
数据结构的三要素:逻辑结构、存储(物理)结构、运算
数据的逻辑结构
逻辑结构反映了事物的组成结构及事物之间的逻辑关系
数据的逻辑结构可以用一个二元组B=(K,R)来表示。其中K是数据结点集合,R是数据之间的二元关系,其中对于<k,k’>∈R,我们称k’为k在关系R上的后继结点;k是k’在关系R上的前驱结点
结点的类型
结点的数据类型可以是基本数据类型,也可以是复合数据类型
结构的分类
用R的性质来刻画数据结构的特点,并进行分类
线性结构:r称为线性关系,也称为前驱关系。每一个结点最多只有一个前驱结点和一个后继结点。e.g.数组、链表、队列
树形结构:r称为层次关系。所有结点有且仅有一个前驱,但是后继的数目不加限制
图结构:结点的前驱和后继的数目不加任何约束
数学上看,树形结构和图结构的基本区别是“每个结点是否仅仅从属于一个直接前驱”而线性结构和树形结构的基本区别是“每个结点是否仅有一个直接后继”
自顶向下的逻辑结构分析设计方法:先明确数据结点,及其主要关系r,然后分析数据结点的数据类型。如果数据结点的逻辑结构比较复杂,那么把他作为下一个 ...
AI中的编程 Parallel Programming
并行编程的介绍 :CPU vs GPU :
CPU: Complex control circuit
good:Flexibility + Performance
bad:Expensive in terms of power
GPU: Simple control circuit
good:More circuit for parallel computation
good:More power efficient
bad:Less flexibility, more restrictive programming models
The CPU is Optimized for Latency,The GPU is Optimized for Throughput
CUDA is Written in C with Extensions :
The CUDA complier complies a CUDA program into two parts, which runs on CPUs and GPUs
step1:Data:cpu->gpu
step2 ...
AI中的编程 LeNet(pytorch讲解)
Data Representation in PyTorchThe Tensor in PyTorch is actually a multidimensional array1234567891011121314151617import torchimport numpy as np# 类比于C++中的includedata = [[1, 2], [3, 4]]# []代表多维(2x2)数组x_data = torch.tensor(data)# 转换成pytorch的tensor,将Python列表转换为PyTorch张量,数据类型根据输入自动推断np_array = np.array(data)# 将Python列表转换为NumPy数组,方便与NumPy库进行后续操作x_np = torch.from_numpy(np_array)# 将NumPy数组转换为PyTorch张量,这样可以利用NumPy的操作,且数据存储方式相同x_rand = torch.rand_like(x_data, dtype=torch.float)# 创建一个与x_data形状相同的张量,初始化,生成浮 ...