Python实用技巧(一)
python实用技巧(二)
python实用技巧(三)
python实用技巧(四)
已知X
是多维数组类型,则:
X[:, v],表示的是truncate X中的一些列(对应于v==1),v是布尔向量,长度与X的列数相等
X[v, :],表示的是truncate X中的一些行,v是布尔向量,长度与X的行数相等
查询python的版本
在操作系统(Windows或者Linux)命令行界面下:
> python -V
Python 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.2
Theano==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)
0
4
16
36
64
由( )
包裹的是生成器类型(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)
0
4
16
36
64
格式化输出自然是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] + 3
TypeError: can only concatenate list (not "int") to list
错误提示很清楚:
can only concatenate list (not "int") to list
只允许list
和list
进行concatenate
,而不可将list
和int
进行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)