Python essentials
李金的中文Python笔记[https://github.com/lijin-thu/notes-python]的学习笔记及摘要。
SCIentific PYthon 简介
Ipython 提供了一个很好的解释器界面。
Matplotlib 提供了一个类似 Matlab 的画图工具。
Numpy 提供了 ndarray 对象,可以进行快速的向量化计算。
Scipy 是 Python 中进行科学计算的一个第三方库,以 Numpy 为基础。
Pandas 是处理时间序列数据的第三方库,提供一个类似 R 语言的环境。
StatsModels 是一个统计库,着重于统计模型。
Scikits 以 Scipy 为基础,提供如 scikits-learn 机器学习和**scikits-image 图像处理**等高级用法。
分片
-
分片用来从序列中提取出想要的子序列,其用法为:
var[lower:upper:step]
其范围包括lower,但不包括upper,即[lower, upper),step表示取值间隔大小,如果没有默认为1。 -
当step的值为负时,省略lower意味着从结尾开始分片,省略upper意味着一直分片到开头。
s = "hello world"
s[::-1]
> 'dlrow olleh'
列表
向列表添加单个元素
l.append(ob) 将元素 ob 添加到列表 l 的最后。
a = [10, 11, 12]
a.append(11)
向列表添加序列
l.extend(lst) 将序列 lst 的元素依次添加到列表 l 的最后,作用相当于 l += lst。
a = [10, 11, 12, 11]
a.extend([1, 2])
排序
l.sort() 会将列表中的元素按照一定的规则排序:
a = [10, 1, 11, 13, 11, 2]
a.sort()
print a
> [1, 2, 10, 11, 11, 13]
如果不想改变原来列表中的值,可以使用 sorted 函数:
a = [10, 1, 11, 13, 11, 2]
b = sorted(a)
print a
print b
> [10, 1, 11, 13, 11, 2]
> [1, 2, 10, 11, 11, 13]
列表反向
l.reverse() 会将列表中的元素从后向前排列。
a = [1, 2, 3, 4, 5, 6]
a.reverse()
print a
> [6, 5, 4, 3, 2, 1]
如果不想改变原来列表中的值,可以使用这样的方法:
a = [1, 2, 3, 4, 5, 6]
b = a[::-1]
print a
print b
> [1, 2, 3, 4, 5, 6]
> [6, 5, 4, 3, 2, 1]
字典
get方法,没有该键则返回默认值None
之前已经见过,用索引可以找到一个键对应的值,但是当字典中没有这个键的时候,Python会报错,这时候可以使用字典的 get 方法来处理这种情况,其用法如下:
d.get(key, default = None)
返回字典中键 key 对应的值,如果没有这个键,返回 default 指定的值(默认是 None )。
pop 方法删除元素
pop 方法可以用来弹出字典中某个键对应的值,同时也可以指定默认参数:
d.pop(key, default = None)
删除并返回字典中键 key 对应的值,如果没有这个键,返回 default 指定的值(默认是 None )。
update方法更新字典
之前已经知道,可以通过索引来插入、修改单个键值对,但是如果想对多个键值对进行操作,这种方法就显得比较麻烦,好在有 update 方法:
d.update(newd)
将字典newd中的内容更新到d中去。
keys 方法,values 方法和items 方法
d.keys(),返回一个由所有键组成的列表;
d.values(),返回一个由所有值组成的列表;
d.items() ,返回一个由所有键值对元组组成的列表;
for 循环
range和xrange
range(10000)会先生成一个长度为100000的临时列表- 使用
xrange来代替range函数,其效果与range函数相同,但是xrange并不会一次性的产生所有的数据
列表推导式
循环可以用来生成列表:
values = [10, 21, 4, 7, 12]
squares = [x**2 for x in values]
print squares
> [100, 441, 16, 49, 144]
还可以在列表推导式中加入条件进行筛选。例如在上面的例子中,假如只想保留列表中不大于10的数的平方:
values = [10, 21, 4, 7, 12]
squares = [x**2 for x in values if x <= 10]
print squares
> [100, 16, 49]
也可以使用推导式生成集合和字典:
square_set = {x**2 for x in values if x <= 10}
print(square_set)
square_dict = {x: x**2 for x in values if x <= 10}
print(square_dict)
> set([16, 49, 100])
> {10: 100, 4: 16, 7: 49}
函数
定义函数
def add(x, y):
"""Add two numbers"""
a = x + y
return a
函数通常有一下几个特征:
- 使用
def关键词来定义一个函数。 def后面是函数的名称,括号中是函数的参数,不同的参数用,隔开,def foo():的形式是必须要有的,参数可以为空;- 使用缩进来划分函数的内容;
docstring用"""包含的字符串,用来解释函数的用途,可省略;return返回特定的值,如果省略,返回None。
接收不定参数
*args 和 **kwargs
*args 表示参数数目不定,可以看成一个元组,把第一个参数后面的参数当作元组中的元素
def add(x, *args):
total = x
for arg in args:
total += arg
return total
print add(1, 2, 3, 4)
print add(1, 2)
> 10
> 3
**kwargs 表示参数数目不定,相当于一个字典,关键词和值对应于键值对
def add(x, **kwargs):
total = x
for arg, value in kwargs.items():
print "adding ", arg
total += value
return total
print add(10, y=11, z=12, w=13)
> adding y
> adding z
> adding w
> 46
包
假设我们有这样的一个文件夹:
foo/
__init__.pybar.py(defines func)baz.py(defines zap)
这意味着 foo 是一个包,我们可以这样导入其中的内容:
from foo.bar import func
from foo.baz import zap
bar 和 baz 都是 foo 文件夹下的 .py 文件。
导入包要求:
- 文件夹
foo在Python的搜索路径中 __init__.py表示foo是一个包,它可以是个空文件。
异常处理
将except 的值改成 Exception 类,来捕获所有的异常。
import math
while True:
try:
text = raw_input('> ')
if text[0] == 'q':
break
x = float(text)
y = 1 / math.log10(x)
print "1 / log10({0}) = {1}".format(x, y)
except ValueError:
print "the value must be greater than 0"
except ZeroDivisionError:
print "the value must not be 1"
except Exception:
print "unexpected error"
本文介绍了Python在科学计算领域的核心库,包括Ipython、Matplotlib、Numpy、Scipy、Pandas、StatsModels和Scikits的使用。涵盖了数据处理、可视化、数值计算、统计分析等方面的知识,适合初学者入门。
723

被折叠的 条评论
为什么被折叠?



