Python常用统计算法(Python在大气海洋科学中的应用)

Python常用统计算法(Python在大气海洋科学中的应用)
作者: 编者:王关锁//康贤彪//黄洲升//刘云丰|责编:周杰//王勤勤
出版社: 科学
原售价: 150.00
折扣价: 118.50
折扣购买: Python常用统计算法(Python在大气海洋科学中的应用)
ISBN: 9787030684462

作者简介

内容简介

第1章 Numpy.Python 科学计算的基础
  Python 语言是一门语义化很强的语言,而且这种语言也经常用在科学计算中。Python 能够用于科学计算中,不仅仅是因为它相对其他语言更好理解,而且有很多前人已经书写完成 Python 与科学计算相关的模块或包,能够很大程度上简化我们书写的语句以及提高编写的效率与代码的可读性。
  想要使用 Python 进行科学计算,首先要了解的包就是 Numpy,这是在 Python 科学计算中最基础的一个包。学习 Numpy 这个包时,可将 Numpy 理解为提供矩阵运算的包。
  在本章中,笔者将为读者介绍 Numpy 的用法以及简单的实例,而在本书的后面章节也会涉及 Numpy 的相关知识以及具体用法。
  1.1 为什么使用 Numpy
  我们使用 Numpy,一定程度上是因为该包提供了很多关于矩阵运算的内容(在 Numpy中,我们习惯性地将这种矩阵称为“数组”或“Numpy 数组”)。但是有的读者可能就想到了,我可以使用列表来生成一个数组,并且通过原生的 Python 进行一些计算。如此操作是没有问题的,但是在这个过程中,将会涉及极其复杂的 I/O 操作,因此将会影响程序运行的速度。
  为了解决程序运行速度的问题,使用 Numpy 这个包进行操作。但是,同样是 Python,Numpy 为什么会提高运行速度呢?其原因就是,Numpy 不完全是原生的 Python,其底层操作是调用 C 语言完成的,而 C 语言的执行效率又非常之高,因此就能够提高程序运行的速度。
  所以一提到 Numpy,就经常将它和运行效率较高的 C 语言结合在一起。当你使用Numpy 的时候,其实就是在使用 C 语言来运行程序并且处理数据。
  1.2 Numpy 中的 ndarray
  Numpy 中所有的操作都是基于数组展开的,那么一提到数组,就不得不提 Numpy 中最重要的一个对象——ndarray 对象,该对象的作用是组织 Numpy 数组。在 Python 中,理解 ndarray 对象的最好方式是将其理解为一个可以进行更高效操作的 list 对象。这样在操作 ndarray 对象的时候就可以得心应手了。在 ndarray 中,所有的数据都是同一类数据,也只能是同一类数据。那么,如何使用 ndarray 呢?其实 ndarray 对象就蕴藏在 numpy.array中。以下是 numpy.array 的示例:
  # 引入 Numpy 包(说明:在使用 Numpy 时,习惯性简称为 np)
  import numpy as np
  np.array(
  object , dtype = None , copy = True , order = None , subok = False , ndmin = 0
  )
  参数说明:
  上述参数虽然多,但是一般我们在使用的过程中经常提到的参数仅有两个,一个是必 填的 object,另一个是用于指定生成数据的数据类型 dtype。以下是一个生成数组的简单 示例:
  import numpy as np
  # 生成时如不指定 dtype,Numpy 将会根据输入的类型自动检查
  # 如果需要强制指定数据类型,可以强制覆写 dtype
  a = np.array([
  [1, 2, 3],
  [2, 3, 4]
  ], dtype = np.float64)
  print(a)
  以下是样例输出:
  [[1. 2. 3.]
  [2. 3. 4.]]
  由上述案例可以看到,我们通过从 Python 原生的数据类型 list 中,生成了一个 Numpy数组,并且我们通过指定其类型 dtype=np.float64,将原本均为整数的列表转化为 float64类型的浮点数数组。那么,Numpy 都为我们准备了哪些数据类型呢?我们通过下面这个表来了解。
  续表
  对于已经实例化的 array,也有很多属性能够了解它的内部状态。
  1) 返回数组维度的数量。
  import numpy as np
  a = np.array([1, 2, 3, 4, 5, 6])
  b = np.array([
  [1, 2, 3],
  [4, 5, 6]
  ])
  print(a.ndim)
  print(b.ndim)
  以下是样例输出:
  1
  2
  ndarray.ndim 用于返回维度的数量,这与我们平时所说的“n 维数组”的 n 一致。
  2) 返回数组的大小。
  import numpy as np
  a = np.array([
  [1, 2, 3],
  [4, 5, 6]
  ])
  print(a.shape)
  以下是样例输出:
  (2, 3)
  ndarray.shape 用于返回数组的大小,这与我们平时所说的“m × n 的数组”中的 m和 n 一致。
  3) 返回数组元素个数。
  import numpy as np
  a = np.array([
  [1, 2, 3],
  [4, 5, 6]
  ])
  print(a.size)
  以下是样例输出:
  6
  ndarray.size 用于返回元素的总个数,其值为 m × n。
  4) 返回数组的数据类型。
  import numpy as np
  a = np.array([
  [1, 2, 3],
  [4, 5, 6]
  ])
  print(a.dtype)
  以下是样例输出:
  int32
  5) 返回数组每个元素的大小。
  import numpy as np
  a = np.array([
  [1, 2, 3],
  [4, 5, 6]
  ])
  print(a.itemsize)
  以下是样例输出:
  4
  6) 返回数组内存信息。
  import numpy as np
  a = np.array([
  [1, 2, 3],
  [4, 5, 6]
  ])
  print(a.flags)
  以下是样例输出:
  C_CONTIGUOUS : True
  F_CONTIGUOUS : False
  OWNDATA : True
  WRITEABLE : True
  ALIGNED : True
  WRITEBACKIFCOPY : False
  UPDATEIFCOPY : False
  7) 返回复数数组的实部和虚部。
  import numpy as np
  a = np.array([
  [1 + 6j, 2 + 5j, 3 + 4j],
  [4 + 3j, 5 + 2j, 6 + 1j]
  ])
  print(a.real)
  print(a.imag)
  以下是样例输出:
  [[1. 2. 3.]
  [4. 5. 6.]]
  [[6. 5. 4.]
  [3. 2. 1.]]
  8) 获取数组数据区内容。
  import numpy as np
  a = np.ma.array([
  [1, 2, 3],
  [4, 5, 6]
  ], mask=[
  [True , False , True],
  [False , True , False]
  ])
  print(a)
  # .data 方法一般用于 mask 数组
  print(a.data)
  以下是样例输出:
  [[-- 2 --]
  [4 -- 6]]
  [[1 2 3]
  [4 5 6]]
  1.3 创建 Numpy 数组
  想要使用 Numpy 进行数组的操作,第一步就是要学会如何创建 Numpy 数组,本节将讲述几种创建数组的常用方式。
  1.3.1 np.empty
  1) 程序语句。
  np.empty(shape, dtype=float, order='C')
  2) 作用:返回一个空数组。
  3) 参数说明。
  4) 使用示例。
  import numpy as np
  a = np.empty ((3, 3))
  print(a)
  以下是样例输出:
  [[1.61327616e-307 3.56043053e-307 1.60219306e-306]
  [2.44763557e-307 1.69119330e-306 1.33514617e-307]
  [3.56011818e-307 1.60219306e-306 1.11258446e-306]]