求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
要资料
 
 

利用python进行数据分析
搭建python环境
统计 1880-2010 年间 全美婴儿姓名的趋势
Ipython & Ipython Notebook
NumPy Basics: Arrays and Vectorized Computation
Pandas(Python Data Analysis Library)
数据加载、储存与文件格式
绘图和可视化(Matplotlib)
时间序列
经济,金融数据应用
补充例子
国王与囚徒
利用python进行科学计算
分形与混沌之-Mandelbrot集合
分形与混沌之-迭代函数系统(IFS)
分形与混沌之-蔡氏电路模拟
对于μ子实验数据进行快速处理与分析
37%法则 - "非诚勿扰" 中的博弈
关于时间/日期的转换
深入研究
一切从游戏开始:完整的一个 python to hack 实例!
习题:扑克牌发牌
 
 

NumPy Basics: Arrays and Vectorized Computation
923 次浏览
8次  

NumPy Basics: Arrays and Vectorized Computation

NumPy (Numerical Python)是python进行科学计算、数据分析的一个基础的拓展库。它的一些工具:

ndarry(N-dimensional array object,N-维矩阵)快速的多维矩阵对象

线性代数运算功能

傅里叶变换

Fortran代码集成的工具

C++代码集成的工具

NumPy特点:

NumPy在创建的时候就有了固定的大小,不像Python的列表可以自动增长。改变一个数组的大小,就会创建一个新的数组,同时删除掉原来的那个。

NumPy数组里面的数据必须是同一个类型的,也因此,它们在内存上的大小是一样的(指数据)。有一个例外就是,如果给数组的是一个对象,从而可以使得数组里面的数据有不同的大小。

NumPy数组可以让在大型数据上的高级数学的或者其他类型的操作变得更加的高效。典型的一个例子,即我们可以用比标准的Python列表更少的代码和更高效实现这些操作。

有非常多的科学上的或者数学上的Python包都使用了NumPy。尽管这些包都支持传统的Python列表输入,但是在处理之前,都会转换成NumPy的数组,而且它们更多的是NumPy数组。换句话说,为了能高效的利用目前大部分(甚至是所有)的科学数学的Python程序,仅仅知道Python内建的列表是不够的,你们必须了解和会使用NumPy数组。

The NumPy ndarray:A Multidimensional Array Object

python中快速、灵活处理大数据的工具。

ndarray的运算

In [45]: arr = np.array([[1., 2., 3.], [4., 5., 6.]])

In [46]: arr
Out[46]:
array([[ 1., 2., 3.],
[ 4., 5., 6.]])

In [47]: arr * arr
Out[47]:
array([[ 1., 4., 9.]
[ 16., 25., 36.]])

Basic Indexing and Slicing

In [51]: arr = np.arange(10)
In [52]: arr
Out[52]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [53]: arr[5]
Out[53]: 5
In [54]: arr[5:8]
Out[54]: array([5, 6, 7])
In [55]: arr[5:8] = 12
In [56]: arr
Out[56]: array([ 0, 1, 2, 3, 4, 12, 12, 12, 8, 9])

随机数的生成

numpy.random模块对Python内置的random进行了补充,一次可以生成多个样本值。

用normal得到正态分布的数组
In [208]: samples = np.random.normal(size=(4, 4))
In [209]: samples
Out[209]:
array([[ 0.1241, 0.3026, 0.5238, 0.0009],
[ 1.3438, -0.7135, -0.8312, -2.3702],
[-1.8608, -0.8608, 0.5601, -1.2659],
[ 0.1198, -1.0635, 0.3329, -2.3594]])

如果需要产生大量的样本值,numpy.random就快了不止一个数量级。

In [210]: from random import normalvariate
In [211]: N = 1000000
In [212]: %timeit samples = [normalvariate(0, 1) for _ in xrange(N)]
1 loops, best of 3: 1.33 s per loop
In [213]: %timeit np.random.normal(size=N)
10 loops, best of 3: 57.7 ms per loop

An Example of Randam Walks

import random
position = 0
walk = [position]
steps = 1000
for i in xrange(steps):
step = 1 if random.randint(0, 1) else -1
position += step
walk.append(position)

看一下结果。

计算走过的最大正距离和负距离

In [215]: nsteps = 1000
In [216]: draws = np.random.randint(0, 2, size=nsteps)
In [217]: steps = np.where(draws > 0, 1, -1)
In [218]: walk = steps.cumsum()

In [219]: walk.min() In [220]: walk.max()
Out[219]: -3 Out[220]: 31

Firsting crossing time

您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



923 次浏览
8次
 捐助