Skip to main content

Python 入门基础知识 - 科学计算 - NumPy和SciPy

Python 入门基础知识 - 科学计算 - NumPy和SciPy

科学计算

科学计算是计算机应用的主要内容之一。开源软件Scilab和商业软件MATLAB都是以科学计算为主的应用软件。使用Python同样可以进行矩阵运算、数值分析等。

NumPy和SciPy简介

NumPy和SciPy是Python中用以实现科学计算的模块包。NumPy主要提供了数组对象、基本的数组函数和傅里叶变换的相关函数。SciPy依赖于NumPy,SciPy提供了更多的计算工具,例如绘制图形等。

1、安装NumPy和SciPy

执行下面的命令安装NumPy

pip install numpy

执行下面命令安装SciPy

pip install scipy

2、NumPy的使用简介

NumPy提供了Python没有提供的数组对象。使用NumPy的数组对象可以创建类似于C语言中的数组。使用NumPy时首先应导入NumPy模块。如下实例,在Python交互式命令行中使用NumPy创建数组,并对数组进行简单的运算。

>>> import numpy # 导入NumPy模块
>>> a = numpy.array((1,2,3,4,5)) # 生成一个数组对象
>>> print(a) # 打印数组a
[1 2 3 4 5]
>>> b = numpy.array(([1,2,3],[4,5,6],[7,8,9])) # 生成数组对象b
>>> print(b)
[[1 2 3]
 [4 5 6]
 [7 8 9]]
>>> c = b + b # 数组对象的加法运算
>>> print(c)
[[ 2  4  6]
 [ 8 10 12]
 [14 16 18]]
>>> d = c * 2 # 数组对象的乘法运算
>>> print(d)
[[ 4  8 12]
 [16 20 24]
 [28 32 36]]
>>> e = d / c # 数组对象的除法运算
>>> print(e)
[[2 2 2]
 [2 2 2]
 [2 2 2]]
>>> print(b * e) # 数组相乘
[[ 2  4  6]
 [ 8 10 12]
 [14 16 18]]
>>> numpy.sin(b) # 求正弦
array([[ 0.84147098,  0.90929743,  0.14112001],
       [-0.7568025 , -0.95892427, -0.2794155 ],
       [ 0.6569866 ,  0.98935825,  0.41211849]])
>>> numpy.tan(b) # 求正切
array([[ 1.55740772, -2.18503986, -0.14254654],
       [ 1.15782128, -3.38051501, -0.29100619],
       [ 0.87144798, -6.79971146, -0.45231566]])
>>> numpy.resize(b, [2,2]) # 重新调整b的大小,生成新的数组
array([[1, 2],
       [3, 4]])
>>> numpy.resize(b, [3,4]) # 重新调整b的大小
array([[1, 2, 3, 4],
       [5, 6, 7, 8],
       [9, 1, 2, 3]])
>>> numpy.sum(b)  # 求b中所有元素的和
45
>>> zero = numpy.zeros((4,4))  # 生成一个4*4的全为0的数组
>>> print(zero)
[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]
>>> one = numpy.ones((4,4)) # 生成一个4*4的全为1的数组
>>> print(one)
[[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]

3、SciPy的使用简介

SciPy模块依赖于NumPy,但是SciPy提供了更多的数学工具。使用SciPy不仅可以进行矩阵运算,还可以求解线性方程、进行微积分运算、优化等。SciPy的功能非常接近MATLAB,如下实例,在Python交互式命令行中使用SciPy。

>>> import scipy # 导入scipy模块
>>> a = scipy.mat('[1 2 3; 4 5 6; 7 8 9]') # 生成一个矩阵
>>> print(a)
[[1 2 3]
 [4 5 6]
 [7 8 9]]
>>> a
matrix([[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]])
>>> a * 2 # 矩阵乘以2
matrix([[ 2,  4,  6],
        [ 8, 10, 12],
        [14, 16, 18]])
>>> 0.5 * a # 0.5乘以矩阵a
matrix([[ 0.5,  1. ,  1.5],
        [ 2. ,  2.5,  3. ],
        [ 3.5,  4. ,  4.5]])
>>> b = scipy.mat('[1;2;3]') # 生成矩阵
>>> print(b) # 输出矩阵
[[1]
 [2]
 [3]]
>>> b
matrix([[1],
        [2],
        [3]])
>>> a * b # 矩阵相乘
matrix([[14],
        [32],
        [50]])
>>> scipy.sin(a) # 求正弦
matrix([[ 0.84147098,  0.90929743,  0.14112001],
        [-0.7568025 , -0.95892427, -0.2794155 ],
        [ 0.6569866 ,  0.98935825,  0.41211849]])
>>> scipy.tan(a) # 求正切
matrix([[ 1.55740772, -2.18503986, -0.14254654],
        [ 1.15782128, -3.38051501, -0.29100619],
        [ 0.87144798, -6.79971146, -0.45231566]])
>>> scipy.resize(a, (4,4)) # 重新调整举证大小 4*4
array([[1, 2, 3, 4],
       [5, 6, 7, 8],
       [9, 1, 2, 3],
       [4, 5, 6, 7]])
>>> v = scipy.vander((1,6)) # 生成Vandermonde矩阵
>>> print(v)
[[1 1]
 [6 1]]
>>> v
array([[1, 1],
       [6, 1]])
>>> scipy.diff(v) # 差分运算
array([[ 0],
       [-5]])
>>>
>>> from scipy import integrate # 导入integrate模块
>>> integrate.quad(lambda x: 2*x, 0, 6) # 求积分 
(36.0, 3.9968028886505635e-13)
>>> integrate.quad(lambda x: 1/(1 + x ** 2), 0, 1) # 求积分
(0.7853981633974484, 8.719671245021581e-15)
版权声明

版权声明

durban.zhang 创作并维护的 Walkerfree 博客采用 创作共用保留署名-非商业-禁止演绎4.0国际许可证。本文首发于 Walkerfree 博客(https://www.walkerfree.com/),版权所有,侵权必究。本文永久链接:https://www.walkerfree.com/article/110