我爱编程

Python学习笔记:NumPy

2017-02-22  本文已影响0人  黑人不是牙膏

什么是NumPy?

NumPy is the fundamental package for scientific computing with Python. It contains among other things:

以上是NumPy官网给的定义,翻译如下:
NumPy是用Python进行科学计算的基础包,它包含一下内容:

  1. 一个强大的N维数组对象Array
  2. 复杂而精确的函数库
  3. 集成了C/C++和Fortran代码的工具
  4. 有用的线性代数、傅立叶变换和随机数生成函数

简而言之,numpy模块为Python提供了N维数组运算的支持,它可以支持高维度的数组和矩阵运算并且提供了大量的数学函数库。

创建数组

Function Description
np.array 把 list, tuple, array, 或者其他的序列模式的数据转换为 ndarray, 默认创建一个新的ndarray,可以推断出dtype,也可以显式指定dtype
np.asarray 把其他类型的数据转换成为ndarray, 如果是ndarray 输入则默认不进行 copy, 而如果是其他类型数据则创建新的ndarray
np.arange 类似于内置的range 函数, 创建一个序列,但返回的是ndarray,而不是列表
np.ones,np.ones_like 根据指定的形状和dtype创建一个全1数组,ones_like以另一个数组为参考,并根据其形状和dtype创建一个全1数组
np.zeros,np.zeros_like 类似于np.ones
np.empty,np.empty_like 创建空数组, 类似于np.ones,只分配内存空间但不填充任何值
eye 创建对角线为1其余为0的矩阵
identity 创建对角线为1其余为0的方阵

代码示例:

>>> import numpy as np

>>> d = [2, 4, 3, 1, 6, 6]
>>> a = np.array(d)
>>> a
array([2, 4, 3, 1, 6, 6])
>>> type(a)
<type 'numpy.ndarray'>
>>> d2 = [[2, 4], [3, 1], [6, 6]]
>>> a2 = np.array(d2)
>>> a2
array([[2, 4],
       [3, 1],
       [6, 6]])

>>> a3 = np.asarray(a2)
>>> a3 is a2
True
>>> d1 = d
>>> d1
[2, 4, 3, 1, 6, 6]
>>> a4 = np.asarray(d1)
>>> a4
array([2, 4, 3, 1, 6, 6])
>>> a4 is d1
False

>>> np.ones(2)
array([ 1.,  1.])
>>> np.ones((2,3))
array([[ 1.,  1.,  1.],
       [ 1.,  1.,  1.]])
>>> np.ones_like(a3)
array([[1, 1],
       [1, 1],
       [1, 1]])
>>> np.ones_like(a2)
array([[1, 1],
       [1, 1],
       [1, 1]])

>>> np.eye(2)
array([[ 1.,  0.],
       [ 0.,  1.]])
>>> np.eye(2,3)
array([[ 1.,  0.,  0.],
       [ 0.,  1.,  0.]])
>>> np.identity(3)
array([[ 1.,  0.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  0.,  1.]])

属性

Attributes Description
np.size ndarray 的属性, ndarray 的元素的数量.
np.dtype ndarray 的属性, ndarray 的元素的类型, 和 C/C++ 中的类型有对应关系.
np.itemsize ndarray 的属性, 元素的字节数, 例如一个 dtype 为 float64 的 ndarray 的元素的大小为 8.
np.ndim ndarray 的属性, ndarray 的维度数.
np.shape ndarray 的属性, 为包含 ndarray 每个维度的大小的 tuple.

数组变换

>>> x = np.array([[[0], [1], [2]]])
>>> x.shape
(1, 3, 1)
>>> x.squeeze()
array([0, 1, 2])
>>> x.squeeze().shape
(3,)

运算

>>> a
array([[ 4,  0,  6],
       [ 2, 12, 12]])
>>> a.nonzero()
(array([0, 0, 1, 1, 1]), array([0, 2, 0, 1, 2])) # 返回了五个indices,没有返回(0, 1)的索引
>>> x = np.array([[1,2],[3,4]])
>>> x.repeat(2) # 按元素重复
array([1, 1, 2, 2, 3, 3, 4, 4])
>>> x.repeat(2,axis=0) # 按行重复
array([[1, 2],
       [1, 2],
       [3, 4],
       [3, 4]])
>>> x.repeat(2,axis=1) # 按列重复
array([[1, 1, 2, 2],
       [3, 3, 4, 4]])
>>> a
array([[6, 2, 4, 5, 5, 3],
       [6, 9, 5, 1, 3, 5]])
>>> a.compress([True, True, False, False, True])
array([6, 2, 5])
>>> a
array([[6, 2, 4, 5, 5, 3],
       [6, 9, 5, 1, 3, 5]])
>>> a.compress([True, True, False, False, True], axis=1)
array([[6, 2, 5],
       [6, 9, 3]])
>>> a.compress([True, True, False, False, True], axis=0) # 因为没有五行,所以会错
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: index 4 is out of bounds for size 2
>>> a.compress([True, False], axis=0)
array([[6, 2, 4, 5, 5, 3]])
>>> a.compress([False, True], axis=0)
array([[6, 9, 5, 1, 3, 5]])
>>> b
array([[ 6,  2,  4,  5,  5,  3],
       [ 1,  3, 10,  5,  6,  9]])
>>> b.argsort()
array([[1, 5, 2, 3, 4, 0],
       [0, 1, 3, 4, 5, 2]])
>>> np.sort(b)
array([[ 2,  3,  4,  5,  5,  6],
       [ 1,  3,  5,  6,  9, 10]])

单目运算函数

np.max: 返回最大值
np.argmax: 返回最大的值的序号
np.min: 返回最小值
np.argmin: 返回最小的值的序号
np.absolute: 计算绝对值,np.absolute(a) 或者 np.abs(a),对于非复数的数组,np.fabs 速度更快
np.exp: 计算 e 的指数
np.sqrt: 计算平方根
np.square: 计算平方
np.log, np.log10, np.log2, np.log1p: 分别为以 e, 10, 2 为底取 log, 和 log(1 + x)
np.sign: 取数值的正负号
np.ceil: 计算比每一个元素大或相等的最小的整数
np.floor: 计算比每一个元素小或相等的最大的整数
np.rint: 近似到最近的整数
np.clip(a, a_min, a_max, out=None): 返回一个 ndarray, 其元素的值如果小于min,就会被min值替代;如果大于max,就会被max值替代
np.modf: 返回一个 tuple, 包含两个数组, 一个是小数部分, 一个是整数部分
np.cos, np.cosh, np.sin, np.sinh, np.tan, np.tanh, np.arccos, np.arccosh, np.arcsin, np.arcsinh, np.arctan, np.arctanh: 三角函数和反三角函数

>>> c
array([  6,   2,   4,   5,   5,   3,   1,   3, 100,   5,   6,   9])
>>> c.clip(2, 10)
array([ 6,  2,  4,  5,  5,  3,  2,  3, 10,  5,  6,  9])
>>> c
array([  6,   2,   4,   5,   5,   3,   1,   3, 100,   5,   6,   9])
>>> c.clip([3,4,1,1,1,4,4,4,4,4,10,10], 8)
array([ 6,  4,  4,  5,  5,  4,  4,  4,  8,  5, 10, 10])

双目运算函数

np.add(a, b): 两个数组元素一一对应相加.
np.substract(a, b): 两个数组元素一一对应相减.
np.multiply(a, b): 两个数组元素一一对应相乘.
np.devide(a, b): 两个数组元素一一对应相除.
np.maximum, np.fmax: 一一比较两个数组中元素大小, 返回相应位置最大的. np.fmax 会忽略 np.NAN, 而 np.maximum 则返回 np.NAN.
np.minimum, np.fmin: 一一比较两个数组中元素大小, 返回相应位置最小的. np.fmin 会忽略 np.NAN, 而 np.minimum 则返回 np.NAN.

集合运算

np.unique: 返回所有不重复的元素排序后的数组
np.intersect1d: 返回两个数组交集后排序的数组
np.union1d: 返回两个数组并集后排序的数组
np.in1d: 返回一个布尔值数组, 判断一个数组元素是否在另一个数组中
np.setdiff1d: 返回一个数组, 其中包含在第一个输入数组而不在第二个输入数组的元素
np.setxor1d 返回不同时在两个输入数组的元素的数组

统计方法

用于布尔数组的统计方法:

sum : 统计数组/数组某一维度中的True的个数
any: 统计数组/数组某一维度中是否存在一个/多个True
all:统计数组/数组某一维度中是否都是True

普通的统计方法:

np.sum: 计算数组的和, 可以设置参数 axis 为 0 或者 1 单独计算每行或每列的和
np.mean: 计算数组的均值, 可以设置参数 axis 为 0 或者 1 单独计算每行或每列的均值
np.std: 计算数组的标准差, 可以设置参数 axis 为 0 或者 1 单独计算每行或每列的标准差
np.var: 计算数组的标准差, 可以设置参数 axis 为 0 或者 1 单独计算每行或每列的标准差
np.min, np.max: 计算数组的最小值或最大值, 可以设置参数 axis 为 0 或者 1 单独计算每行或每列的最小值或最大值
np.argmin, np.argmax: 计算数组的最小值或最大值的 index, 可以设置参数 axis 为 0 或者 1 单独计算每行或每列的最小值或最大值 index
np.cumsum: 累加
np.cumprod: 累乘

参考至:

上一篇下一篇

猜你喜欢

热点阅读