Python科学计算

一、函数库

  • 线性代数使用LAPACK库
  • 快速傅立叶变换使用FFTPACK库
  • 常微分方程求解使用ODEPACK库
  • 非线性方程组求解以及最小值求解等使用MINPACK库

二、Numpy   

  1、创建数组

import numpy as np

a = np.array([1, 2, 3, 4])
b = np.array([[1, 2, 3, 4], [4, 5, 6, 7], [7, 8, 9, 10]])

  结果:

  

  很显然,这种方法效率并不高,所以Numpy提供了很多专门用来创建数组的函数,例如:

  • arange()类似于内置函数range(),通过设置开始值、终值和步长创建表示等差数列的一维数组,但是得到的结果并不包含终值,示例如下:
    c = np.arange(1, 10, 1)  # 结果:[1 2 3 4 5 6 7 8 9]
  • lispance()通过指定开始值、终值和元素个数创建表示等差数列的一维数组,可以通过endpoint参数指定是否包含终值,默认为True,即包含终值。示例如下:
  • d = np.linspace(1, 10, 10) # 结果:[  1.   2.   3.   4.   5.   6.   7.   8.   9.  10.]
    e = np.linspace(1, 10, 10, endpoint=False) # 结果:[ 1.   1.9  2.8  3.7  4.6  5.5  6.4  7.3  8.2  9.1]

    logspace()和linspace()类似,不过它创建的数组是等比数列。开始值0表示10^2,终值2表示10^2,步长5表示有5个数值,基数可以通过base参数设置,默认值为10, 创建一个2^1/5的等比数组。 示例如下:

  • f = np.logspace(0, 2, 5) # 结果:[   1.            3.16227766   10.           31.6227766   100.        ]
    g = np.logspace(0, 2, 5, base=2, endpoint=False) # 结果:[ 1.          1.31950791  1.74110113  2.29739671  3.03143313]

    zeros()、ones()、empty()可以创建指定形状和类型的数组。其中:empty()仅仅分配数组所使用的内存,不对数组元素进行初始化操作,因此它的运行速度是最快的。              zeros()将数组元素初始化为0。    

h = np.empty((2, 3), np.int) # 结果:[[ 1 0 506081024][        0         0         0]]    只分配内存,不对其进行初始化  
i = np.zeros(4, np.float) # 结果:[ 0.  0.  0.  0.]

  2、存取元素

  • 一维数组可以使用和列表相同的方式对数组的元素进行存取
b = a[5] # 用整数作为下标可以获取数组中的某个元素
c = a[3:5] # 用切片作为下标可以获取数组的一部分,包括a[3]但不包括a[5]
d = a[:5] # 切片中省略开始下标,表示从a[0]开始
e = a[:-1] # 下标可以使用负数,表示从数组最后往前数
a[2:4] = 101, 102 # 下标可以用来修改元素的值
f = a[1:-1:2] # 切片中的第三个参数表示步长
g = a[::-1] # 省略切片开始的下标和结束的下标,步长为-1,表示整个数组头尾颠倒
h = a[5:1:-2] # 步长为负数时,开始下标必须大于结束下标
  • 多维数组的创建与存取
b = np.arange(0, 60, 10).reshape(-1, 1) + np.arange(0, 6)

    结果为:

[[ 0  1  2  3  4  5]
 [10 11 12 13 14 15]
 [20 21 22 23 24 25]
 [30 31 32 33 34 35]
 [40 41 42 43 44 45]
 [50 51 52 53 54 55]]
c = b[0, 3:5] # 取第0行第3列和第4列的数

d = b[4:, 4:] # 取第4行到最后一行的第4列到最后一列的数

e = b[:, 2] # 取所有行的第2列的数

f = b[2::2, ::2] # 取第2行到最后一行,第一列到最后一列的步长为2的数

g = b[(0, 1, 2, 3), (1, 2, 3, 4)] # 取第0行的第1个数,第1行的第2个数,第2行的第3个数,第3行的第4个数

h = b[3:, [0, 2, 5]] # 取第3行之后的所有列中的第0列,第2列,第5列的数

mask = np.array([1, 0, 1, 0, 0, 1], dtype=np.bool) # bool类型的1代表取这行,0代表不取这行
i = b[mask, 2] # 取第0行,第2行,第5行的第2列的数 

mask = np.array([1, 0, 1, 0, 0, 1]) 
j = b[mask, 2] # 取第1行,第0行,第1行,第0行,第0行,第1行的第二列的数

mask = [True, False, True, False, False, True]
k =b[mask, 2] # 取第1行,第0行,第1行,第0行,第0行,第1行的第二列的数

l = b[[1, 2]] # 与a[[1,2], :]相同,取第1行和第2行的所有数据

   3、庞大的函数库

    求和

      sum()计算数组元素之和,也可以对列表、元组等和数组类似的序列进行求和。当数组为多维时,它计算数组中所有元素的和。

a = [[1,2,3,4],[5,6,7,8],[3,4,2,7],[3,6,2,9]]
np.sum(a)

    平均值

      mean用于求数组的平均值

a = [[1,2,3,4],[5,6,7,8],[3,4,2,7],[3,6,2,9]]
np.mean(a)

    方差

      var()用于求数组的方差

a = [[1,2,3,4],[5,6,7,8],[3,4,2,7],[3,6,2,9]]
np.var(a)

    标准差

      std()用于求数组的标准差 

a = [[1,2,3,4],[5,6,7,8],[3,4,2,7],[3,6,2,9]]
np.std(a)

    最值

      用min()和max()计算数组的最小值和最大值,ptp()计算最大值和最小值之间的差,argmin()和argmax()计算最小值和最大值的下标

a = [[1,2,3,4],[5,6,7,8],[3,4,2,7],[3,6,2,9]]
np.min(a)
np.max(a)
np.ptp(a)
np.argmin(a)
np.argmax(a)

    排序

      数组的sort()方法用于对数组进行排序

a = [[1,2,3,4],[5,6,7,8],[3,4,2,7],[3,6,2,9]]
np.sort(a)

    中值

      用median()可以获得数组的中值  

a = [[1,2,3,4],[5,6,7,8],[3,4,2,7],[3,6,2,9]]
np.median(a)

三、scipy统计-stats

 

posted on 2018-01-02 15:30  python屌丝的逆袭  阅读(6434)  评论(0编辑  收藏  举报

导航