编程思想概述
这篇博客的主要原因:简历上面写的 熟悉面向对象和函数式编程思想,正好被面试官问到,解释一下函数式思想,才发现自己没有完全理解,于是写下这篇博客。
函数式编程(Functional Programming)函数式编程是一种编程范式,除了函数式编程之外还有命令式编程,声明式编程等编程范式。
相对于面向对象编程(Object-oriented programming)关注的是数据而言,函数式编程关注的则是动作,其是一种过程抽象的思维,就是对当前的动作去进行抽象。
命令式编程(Imperative Programming)
命令式编程以计算机指令的形式来描述程序的执行过程。在命令式编程中,程序员需要明确地指定程序的每一个步骤,以实现特定的功能。命令式编程通常使用变量、赋值、条件语句、循环语句等基本结构来组织代码,以实现程序的逻辑控制和数据处理。
程序的执行过程就是一系列的指令,这些指令按照一定的顺序执行,从而完成特定的任务。命令式编程的核心思想是通过一系列的命令来改变程序的状态,从而实现特定的功能。
命令式编程的优点是直观、易于理解和实现,适用于一些简单的、功能单一的程序。但是随着程序规模的 ...
一些图像格式的读取和保存
npy读取使用numpy读取,nibabel.viewers.OrthoSlicer3D显示
12image = np.load(path)OrthoSlicer3D(image).show()
npz读取使用numpy读取
1234567>>> import numpy as np>>> data = np.load('atlas.npz')>>> data.files['vol', 'seg', 'train_avg']>>> vol = data['vol']>>> seg = data['seg']>>> train_avg = data['train_avg']
使用Pillow(PIL)显示
1234567>>> vol.shape(160, 192, 224)>>> seg.shape(160 ...
Pytorch清除GPU存储
清除GPU存储有时 Control-C 中止运行后 GPU 存储没有及时释放,需要手动清空。
1 Pytorch代码在 PyTorch 内部可以
1torch.cuda.empty_cache()
2 命令行在命令行可以先使用 ps 找到程序的 PID,再使用 kill 结束该进程
1ps aux | grep python kill -9 [pid]
3 Nvidia重置直接重置没有被清空的 GPU
1nvidia-smi --gpu-reset -i [gpu_id]
补充:设置为 cuDNN benchmark 模式
Benchmark 模式会提升计算速度,但是由于计算中有随机性,每次网络前馈结果略有差异
1torch.backends.cudnn.benchmark = True
如果想要避免这种结果波动,设置
1torch.backends.cudnn.deterministic = True
参考
NumPy基础
最近看代码发现很多NumPy的基本代码都不太理解,因此重新回顾学习一下。
参考NumPy Ndarray 对象 | 菜鸟教程 (runoob.com)
NumPy Ndarray对象NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。
ndarray 对象是用于存放同类型元素的多维数组。
ndarray 中的每个元素在内存中都有相同存储大小的区域。
创建一个 ndarray 只需调用 NumPy 的 array 函数即可:
1numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
参数说明:
名称
描述
object
数组或嵌套的数列
dtype
数组元素的数据类型,可选
copy
对象是否需要复制,可选
order
创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)
subok
默认返回一个与基类类型一致的数组
ndmin
指定生成数组的最小 ...
记一次Mac装windows系统
今天帮田老师的Mac装Windows系统笔记本型号是 MacBook Air(13英寸,2014年初)
首先Mac系统忘记密码,只能重置。根据网上教程。123456 1、在Mac开机瞬间按住【Command + R】; 2、出现苹果logo进度条后,会进入Mac恢复界面; 3、在恢复界面工具栏中选择【实用工具】-【终端】; 4、进入【终端】界面,输入【resetpassword】回车; 5、弹出重置密码界面,选择登录的用户,点击【下一步】; 6、重新设置开机密码,重启电脑即可;但是这台电脑在重设密码的时候,需要 “输入密码解锁磁盘macintosh HD”,这个问题一直没解决掉。最后采取的方案是直接清空磁盘。 重置流程 在Mac恢复界面,使用磁盘工具直接清空。重新安装了Mac系统,不过系统是OS X。版本过低,导致下面一系列问题,而且我也不会更新Mac的系统,Appstore中的macOS Monterey不支持这台电脑,也没有其他系统版本。(这次Mac的使用,让我认识到苹果系统不是想象中的好用,可能也是版本的原因。)刚开始想直接装 Windows10系统,不过这台电脑的B ...
L1和L2距离
好久没有写博客了,今天要开始重新捡起来了。
距离概念设$X=(x_1,x_2,\dots,x_n),Y=(y_1,y_2,\dots,y_n)$
L1距离 (Manhattan distance 中文:曼哈顿距离)
d_1(X,Y)=\sum^n_{i=1}|x_i-y_i|_1L2距离 (Euclidean distance 中文:欧式距离)
d_2(X,Y)=\sqrt{\sum^n_{i=1}(X_i-Y_i)^2}
图中红线代表曼哈顿距离,绿线代表欧氏距离也就是直线距离而蓝色和黄色代表等价的曼哈顿距离。曼哈顿距离——两点在南北方向上的距离加上在东西方向上的距离,即$d(i,j)=|x_i-x_j|+|y_i-y_j|$。对于一个具有正南正北、正东正西方向规则布局的城镇街道,从一点到达另一点的距离正是在南北方向上旅行的距离加上在东西方向上旅行的距离,因此,曼哈顿距离又称为出租车距离。曼哈顿距离不是距离不变量,当坐标轴变动时,点间的距离就会不同。曼哈顿距离示意图在早期的计算机图形学中,屏幕是由像素构成,是整数,点的坐标也一般是整数,原因是浮点运算很昂贵,很慢而且有误差,如果直接 ...
Python列表插入探究
今天刷leetcode的时候,看官方题解,发现一种python的列表插入方法。
即使用切片来实现插入。
现在来比较一下insert()方法和切片实现插入的区别。
insert()描述insert() 函数用于将指定对象插入列表的指定位置。
语法insert()方法语法:
list.insert(index, obj)参数index — 对象 obj 需要插入的索引位置。obj — 要插入列表中的对象。返回值该方法没有返回值,但会在列表指定位置插入对象。
123456789>>> list = [0,1,2,3,4,5]>>> list.insert(3,'s')>>> list[0, 1, 2, 's', 3, 4, 5]>>> list = [0,1,2,3,4,5]>>> list.insert(-2,'s')>>> list[0, 1, 2, 3, 's', 4, 5]
默认行为是将项目插入给定 ...
python遍历
遍历列表123456789101112131415161718192021222324252627282930313233343536373839404142list = ['html', 'js', 'css', 'python']print('遍历列表方法1:')for i in list: print ("序号:%s 值:%s" % (list.index(i) + 1, i))print ('\n遍历列表方法2:')for i in range(len(list)): # range(x)函数,可以生成一个整数序列,从0开始到小于x的整数 print ("序号:%s 值:%s" % (i + 1, list[i]))print ('\n遍历列表方法3:')for i, val in enumerate(list): print ("序号:%s 值:%s&q ...
Android Studio导入本地Gradle
使用Android Studio导入其他人项目的时候,通常Gradle的版本是不一样的,因此就需要下载Gradle。但是由于网络的原因,Android Studio中Gradle的下载经常失败,只能自己手动下载。
Android Studio版本:4.0.1
解决方案:
1、在Android Studio的Project视图中,找到gradle/wrapper/gradle-wrapper.properties,打开properties文件,找到distributionUrl字段,复制distributionUrl的值。例如:
1https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
删除https后面的\,在浏览器中复制,即可下载相应版本的gradle。
2、将下载好的gradle-x.x.x-all.zip放在用户目录下的.gradle/wrapper/dists/gradle-x.x.x-all/(一串字符串)/ 中,gradle-x.x.x-all.zip放进后不要解压,不要解压,不要解压。不需要删除其他 ...
HTTP协议
HTTP工作原理HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
以下是 HTTP 请求/响应的步骤:
客户端连接到Web服务器 一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。
发送HTTP请求 通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。
服务器接受请求并返回HTTP响应 Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
释放连接TCP连接 若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为k ...