D2L: Matrix
MatrixConcept and Principle
标量
1234x=torch.tensor([1.0])y=torch.tensor([2.0])print(x+y,x*y,x/y,x**y)
向量
12x=torch.arange(4)print(x,x[3],len(x),x.shape,x.size())
矩阵
1234x=torch.eye(20)x=torch.arange(20).view(5,4)print(x,x.T,x.t())print(torch.arange(24).reshape(2,3,4))
运算
123456789101112131415161718192021222324252627A=torch.arange(20,dtype=torch.float32).view(5,4)B=A.clone() #创建A的副本给B,A与B指向不同地址C=B #B与C指向相同地址# B,C都会改变C[0,:] = 0print(A,B,C)# 矩阵加 点乘 每个元素求sinprint(A+B,A*B,torch.sin(A))A=torch ...
Compile and Link
Compile and Link编译
编译即将程序员所编写的源代码翻译为机器代码的过程
编译永远都是以单个源文件为单位的,对单个源文件进行编译的结果是对应的目标文件(.o文件,是对二进制代码的一种封装,Linux下为elf格式,Windows下为pe格式),gcc -c xxx.c 即会编译出.o文件。在Linux下使用readelf -h xxx.o命令可以查看elf文件详细信息。
.o文件不可以直接执行,操作系统也不允许直接执行.o文件。因为编译的过程中每个源文件是单独进行的,单个文件中可能会调用未定义的函数。
单个文件中只知道对调用其他文件中函数的声明,并不知道定义,编译结束后的相应函数跳转地址暂时会用0代替,等到链接的过程再进行修正。
链接
静态链接
将全部编译好的目标文件(连同一些库)一起链接成为一个可执行文件的过程,可执行文件便可在相应操作系统直接运行。gcc xxx.o xx.o -o xxx
链接时,编译器会自动将之前暂时设置的函数跳转地址进行修正。
静态链接最大的问题是生成的文件体积大、并且相当耗费内存资源。静态链接的构建过程很慢,但是只有单独的可执行文件运行时不会 ...
Git Skills
Git Skills
初始化本地git仓库
1git init [仓库名]
不指定仓库名时在当前文件夹下创建本地git仓库。初始化仓库后生成隐藏文件夹,包含本地仓库各种信息。
关联远端git仓库
1git remote add <远端仓库名称> <远端仓库地址>
远端仓库名称随便起,供本地仓库之后使用,可以关联多个。
创建/切换分支
12git branch <分支名> git switch <分支名>
本地分支与远端仓库分支一一对应。 向远端仓库push时如果远端仓库没有创建对应分支,则应先创建同名分支
1git push --set-upstream origin <分支名>
拉取远端仓库到本地
12git pull [远程主机名] [远程分支名] git fetch [远程主机名] [远程分支名]
不指定远端主机名和远端分支名时,拉取默认远端主机的同名分支的代码。 git pull会将代码直接与本地仓库合并 git fetch 不会直接合并,需要手动合并
将本地仓库推 ...
MultiThreading programming #1
MultiThreading programming #1Thread
What is Thread ?
线程是一个可执行路径,每一个线程可以独立于其他线程执行
每个线程在均进程(Process)内执行,在操作系统中,进行提供了程序运行的独立环境
单线程应用,在进程的独立环境中只跑一个线程,该线程具有独占权
多线程应用,单个进程中跑多个线程,多个线程共享当前的执行环境(尤其是内存)
共享:多个线程共同占有某种资源,如一个线程在后台读取数据,另一个线程在数据到达后进行展示。
下面是c#中最简单的异步编程实例:
123456789101112131415161718192021222324252627282930class Program{ static void Main(string[] args) { Thread.CurrentThread.Name = "Main Thread..."; //开辟一个新线程 Thread thread = new Thread(WriteY); ...
MultiThreading programming #2
MultiThreading programming #2ThreadThread Safety
本地状态与共享状态
Local 本地独立:CLR为每个线程分配自己的内存栈,以便使本地变量保持独立
Shared 共享:如果多个线程引用到了同一个对象实例,那么他们就共享了数据;被Lambad表达式或匿名委托捕获的本地变量,会被编译器转化为字段(field),所以也会被共享;静态字段也会在线程间共享
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576class Program{ static void Main(string[] args) { /*本地变量不共享*/ //打印六次hello... Thread thread = new Thread(GO); thread.S ...