2018再次启航

在上一篇文章错综复杂的2017基本介绍我一直的选择与坚持,现在来到学校实验室已经一个多月将近两个月了,以后研究的大体方向应该基本上也是确定了:应该是当下随流最火的机器学习啦。因为本身对于算法这一块还是非常看重与感兴趣的,而且导师及博士师兄们也是研究相关领域的,所以也算是师傅领进门啦。
最近一直在学习相关的基础知识,包括linux、python、机器学习基本算法及一些深度学习框架工具等;也做了许多相关的笔记,有时间一一拿上来与大家分享交流。
今天主要是一些平时用到的相关linux及python基础知识,后面的文章对于相关学习方向尽量可以整理成一个体系从前到后、由表及里与大家分享。

**

linux:

**
查看、修改或者执行某些命令需要root用户的权限,如果不想直接切换到root用户,就可以使用sudo命令。sudo命令用于针对单个命令授予临时权限。sudo仅在需要时授予用户权限,减少了用户因为错误执行命令损坏系统的可能性。
vi文件编辑:
:wq 保存文件并退出vi
:w 保存文件但不退出vi
:w file 将修改另外保存到file中,不退出vi
:q 不保存文件,退出vi (shift+z+z)

命令行打开网页;将网页内容另存为;
curl http://www.yahoo.com

curl -o page.html http://www.yahoo.com

使用xshell连接远程ubuntu系统,并实现上传下载文件功能:安装lrzsz,运行sudo apt-get install lrzsz ,再次运行rz即可上传;

xshell下用rz命令上传文件,sz 文件名:从远端下载文件到本地

mkdir 文件夹名
unzip 文件夹.zip 解压
tar -zcvf /home/xahot.tar.gz /xahot 压缩
zip -r ./xahot.zip ./* 压缩

安装python3.6
wget https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tgz
tar zxvf Python-3.6.3.tgz
cd Python-3.6.3
./configure –prefix=/home/zgz/python35(安装到个人目录)
make
make install
sudo ln -s /home/zgz/python35/bin/python3 /usr/bin/python3.6 建立软连接(当在shell下直接运行python3.6时即启动的此版本,同时利用此方法同样可以启动其他python版本)

cp file1 file2
复制file1到file2,如果file2存在,则被file1覆盖,否则创建file2
cp file1 file2 dir1
将file1和file2复制到 dir1中,dir必须存在
cp dir1/* dir2
dir1的所有文件复制到dir2,dir2必须存在
rm ./* 删除当前目录下所有文件
rm -r ./* 删除当前目录下所有文件(包括文件夹及所有子目录)
cat file1 >> file2 将file1的内容追加到file2
cp -r dir1/* dir2 将目录dir1下的文件复制到目录dir2下

curl命令是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。

光标定位到要删除的那一行,然后 dd删除一行
A移动到行首,L移动到行末

分包压解缩:
因为ripe0文件非常大,将其分包压缩,每包50M大小,如下命令:
这里写图片描述这里写图片描述
将如上分拆得包解压:
cat ripe0.tar.bz2* | tar -zxv 这样的话会全部解压到一个文件夹ripe0,所以想分文件夹得话需要单独解压而不是用.bz2*

**

python:

**

python模块中的all属性,可用于模块导入时限制,如:
from module import *
此时被导入模块若定义了all属性,则只有all内指定的属性、方法、类可被导入。
若没定义,则导入模块内的所有公有属性,方法和类 。

sudo pip install 安装包 / sudo apt-get install 安装包
pip用来安装来自PyPI的python所有的依赖包,并且可以选择安装任何在PyPI上已上传的先前版本的依赖包;
apt-get可以用来安装软件、更新源、也可以用来更新自Ubuntu的典型依赖包,典型安装即意味着它只是安装(最新发布的,或最近一个的)单一版本,并且我们不能决定我们要安装的依赖包的版本或选择它之前的版本。

tqdm 是一个快速,可扩展的Python进度条,可以在 Python 长循环中添加一个进度提示信息,用户只需要封装任意的迭代器 tqdm(iter)。iter(数据):生成迭代器

torch.Tensor.view会将原有数据重新分配为一个新的张量,改变其表现形式;
这里写图片描述

x=torch.randn(4,4) 此处为一个4*4共16个元素的张量矩阵,利用view变换:y=x.view(-1,8) 注意此处利用了一个-1,因为总共16,后面为8,所以此处-1表示16/8得到后的结果;
1. #移动文件(目录)
2. shutil.move(“oldpos”,”newpos”)
3. shutil.move(“D:/知乎日报/latest/你愿意吗?.pdf”, “D:/知乎日报/past/”)

os.walk(top)
top – 是你所要便利的目录的地址, 返回的是一个三元组(root,dirs,files)。
root 所指的是当前正在遍历的这个文件夹的本身的地址
dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)

  1. 列表[]可包含任何数据类型的元素,单个列表中的元素无须全为同一类型。 2. append() 方法向列表的尾部添加一个新的元素。只接受一个参数。
  2. extend()方法只接受一个列表作为参数,并将该参数的每个元素都添加到原有的列表中。

s = input(‘birth: ‘) #接收输入,但返回的是str类型
birth = int(s) #强制转换
if birth < 2000:
print(‘00前’)
else:
print(‘00后’)

range()函数,可以生成一个整数序列,再通过list()函数可以转换为list。比如range(5)生成的序列是从0开始小于5的整数:

list(range(5))
[0, 1, 2, 3, 4]

n = 0
while n < 10:
n = n + 1
if n % 2 == 0: # 如果n是偶数,执行continue语句
continue # continue语句会直接继续下一轮循环,后续的print()语句不会执行
print(n)
执行上面的代码可以看到,打印的不再是1~10,而是1,3,5,7,9。

和list比较,dict有以下几个特点:
1. 查找和插入的速度极快,不会随着key的增加而变慢;
2. 需要占用大量的内存,内存浪费多。

而list相反:
1. 查找和插入的时间随着元素的增加而增加;
2. 占用空间小,浪费内存很少。

所以,dict是用空间来换取时间的一种方法。(根据key计算hash,相当于建立索引,存储位置)

from abstest import my_abs来导入my_abs()函数,注意abstest是文件名(不含.py扩展名)导入文件中定义的函数

def my_abs(x):
if not isinstance(x, (int, float)): #检查参数是否为int或float类型
raise TypeError(‘bad operand type’)
if x >= 0:
return x
else:
return -x

def power(x, n=2): #定义函数计算x的次幂,设置默认参数n=2,当只传进一个参数时赋值给x
s = 1
while n > 0:
n = n - 1
s = s * x
return s

def calc(numbers): #定义可变参数加
sum = 0
for n in numbers:
sum = sum + n * n
return sum

定义可变参数和定义一个list或tuple参数相比,仅仅在参数前面加了一个*号。在函数内部,参数numbers接收到的是一个tuple,因此,函数代码完全不变。但是,调用该函数时,可以传入任意个参数,包括0个参数

nums = [1, 2, 3]
calc(*nums)
14
*nums表示把nums这个list的所有元素作为可变参数传进去。
对于一个list,可以有3个参数,前2个表示取值的下标范围,最后一位表示的取值步长:L[:10:3]取L中的前10个元素且每3个取一个;

dict迭代:
d = {‘a’: 1, ‘b’: 2, ‘c’: 3}
for key in d:
for value in d.values() 迭代value同时迭代key和value,可以用for k, v in d.items()。

通过collections模块的Iterable类型判断:
from collections import Iterable
isinstance(‘abc’, Iterable) # str是否可迭代
True

Python内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身:
for i, value in enumerate([‘A’, ‘B’, ‘C’]):…
print(i, value)…
0 A
1 B

[x * x for x in range(1, 11)] #列表生成器
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

[m + n for m in ‘ABC’ for n in ‘XYZ’]

基于不同环境版本的python,可以对应不同的软件
同一linux环境下,安装有2.7及3.6版本的python,其中conda对应3.6版本:
命令行输入:python2进入2.7版本,输入python3进入3.6版本;
当利用pip安装或更新软件时,对于不同版本的python可以利用指定相应版本的pip进行基于相应python版本软件的安装升级:如对于基于2.7版本的环境进行安装更新其pytorch版本:python2 -m pip install –upgrade torch torchvision( -m pip 表示运行 pip 模块,权限不够时记得前面加上sudo)
这里写图片描述
如上安装制定版本的0.3的torch于python2的环境下;

猜你喜欢

转载自blog.csdn.net/enjoy_endless/article/details/80571301