python实用技巧(一)

来源:互联网 发布:linux 当前路径命令 编辑:程序博客网 时间:2024/04/28 20:06

Python实用技巧(一)
python实用技巧(二)
python实用技巧(三)
python实用技巧(四)

已知X是多维数组类型,则:

  • X[:, v],表示的是truncate X中的一些列(对应于v==1),v是布尔向量,长度与X的列数相等

  • X[v, :],表示的是truncate X中的一些行,v是布尔向量,长度与X的行数相等

查询python的版本

在操作系统(Windows或者Linux)命令行界面下:

> python -VPython 3.4.3 :: Anaconda 2.3.0 (32-bit)

如果我们已经进行python命令环境下呢:

>>> import sys>>> sys.version'3.4.3 |Anaconda 2.3.0 (32-bit)| (default, Mar  6 2015, 12:08:17) [MSC v.1600 32 bit (Intel)]'>>> sys.version[:5]'3.4.3'

查询包的版本

>>> import library_name>>> library_name.__version__'*.*.*'            # 如果我们使用dir(),返回其属性和方法以list of strings的形式            # 我们会看到该对象内部会维护__version__

requirements.txt文件的使用

requirements.txt文件一般用来保存第三方的库名及其对应的版本信息,如:

numpy==1.9.2Theano==0.7.0

将所有需要安装的库以文件的形式统一进行安装,避免了手动的一个库一个库的安装。
切换到该.txt文件所在的文件夹下:

pip install -r requirements.txt

list comprehension

使用list comprehension(最外层为[ ])的目的是使用简洁的方式创建一个list(也即list comprehension返回一个list),而list是一个可迭代对象(iterables):

在list comprehension中增加判断逻辑(也即filter):

[exp for x in seq if COND]

注意:不是[exp for x in seq and COND],也不是[exp if COND for x in seq]。

>>> [i**2 for i in range(10) if i%2 == 0][0, 4, 16, 36, 64]>>> type([i**2 for i n range(10) if i%2 == 0])list>>> for i in [i**2 for i in range(10) if i%2==0]:        print(i)04163664

( )包裹的是生成器类型(generator),也是一种可迭代类型(iterables)

>>> type((i**2 for i in range(10) if i%2==0))generator>>> for i in (i**2 for i in range(10) if i%2==0):        print(i)04163664

格式化输出自然是format

>>> print(1/6)0.16666666666666666                     # 默认>>> print('{0}'.format(1/6))0.16666666666666666                     # 默认>>> print('{0:.2f}'.format(1/6))0.17>>> print('{0:.0f}'.format(1/6))0                                       # 本身含有四舍五入的操作

不可以{:d}的形式输出一个float:

>>> print('{0:d}'.format(10.0))ValueError: Unknown format code 'd' for object of type 'float'>>> print('{0:.0f}'.format(10.0))10

api含义

np.random.randn()   ~   N(0, 1),    标准高斯分布np.random.rand()    ~   U(0, 1),     [0, 1]区间上的均匀分布

ipython:查看日期

>>> !date当前日期: 2015/12/19 周六输入新日期: (年月日)

enumerate与zip组合

enumerate(zip(, ))

生成的每一个可迭代的对象是一个二元元组,元组第一位是其序号,第二位是zip打包返回的内容;

for i, (param, true, est) in enumerate(zip('ABCD', [A, B, C, D], plesq[0])):    plt.text(10, 3-i*.5, ''.format())

采样

# data是一维数组n = len(data)       idx = np.random.randin(0, n, size=(nsamples, n))samples = data[idx]                    # samples的shape也变为(nsamples, n)

生成字符型000000-999999

for i in range(1000000):    passwd = str(i)    if len(passwd) < 6:        passwd = (6-len(passwd))*'0'+passwd    print(passwd)

listA + listB(表示concatenate)

两个list之间进行相加的意义何在:

>>> [1, 2]+[3, 4][1, 2, 3, 4]            # 实现一种拼接,相当于extend                        # 只有加法(也即拼接)运算。                        # 没有乘除,也没有减法>>> [1, 2] + 3TypeError: can only concatenate list (not "int") to list

错误提示很清楚:

can only concatenate list (not "int") to list

只允许listlist进行concatenate,而不可将listint进行concatenate

在LeNet5的源程序中:

params = layer3.params + layer2.params + layer1.params + layer0.params                        # 其中每一层的params都是list类型                        # 最终的params是全部组成的list

chr()与ord()

>>> chr(65)'A'>>> ord('A')65>>> chr(ord('A')+1)'B'

分数的表示以及分数的约分

>>> from fractions import Fraction>>> Fraction(1, 2)Fraction(1, 2)>>> Fraction(2, 4)Fraction(1, 2)
1 0
原创粉丝点击