Python的Numpy模块

数组对象

  1. ndarray对象
    NumPy中定义的最重要的对象是称为ndarray的N维数组类型。它描述相同类型的元素集合,可以使用基于零的索引访问集合中的项目。
    ndarray中的每个元素在内存中使用相同大小的块。ndarray中的每个元素是数据类型对象的对象(称为 dtype)。

数组函数

  1. array函数
    用于创建ndarray对象。
>>> import numpy as np
>>> a = np.array([1,2,3]) # 一维
>>> print(a)
[1 2 3]

>>> a = np.array([[1,2],[3,4]]) # 二维
>>> print(a)
[[1 2]
 [3 4]]

>>> a = np.array([1,2,3,4,5], ndmin = 3) # 最小维度=3
>>> print(a)
[[[1 2 3 4 5]]]
  1. arange函数
    range与arange的异同:
    range()返回的是range object,而np.arange()返回的是numpy.ndarray()。
    range()不支持步长为小数,np.arange()支持步长为小数。
    两者都可用于迭代,均有三个参数,以第一个参数为起点,第三个参数为步长,截止到第二个参数之前的不包括第二个参数的数据序列。
>>> range(1,5)
range(1, 5)
>>> np.arange(1,5)
array([1, 2, 3, 4])
>>> np.arange(1,5,.5)
array([ 1. ,  1.5,  2. ,  2.5,  3. ,  3.5,  4. ,  4.5])
  1. tile函数
    模块位置:numpy.lib.shape_base
    功能:重复某个数组的操作
    说明:tile(A,reps) 功能是将数组A重复n次,构成一个新的数组。A的类型众多,几乎所有类型都可以:array, list, tuple, dict, matrix以及基本数据类型int, string, float以及bool类型;reps的类型也很多,可以是tuple,list, dict, array, int,bool.但不可以是float, string, matrix类型。
from numpy import *

>>> tile([0,0],3)
array([0, 0, 0, 0, 0, 0])

>>> tile([0,0],(3,1))
array([[0, 0],
       [0, 0],
       [0, 0]])

>>> tile(3,(2,3))
array([[3, 3, 3],
       [3, 3, 3]])

>>> tile([0,0],(2,3))
array([[0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0]])

>>> tile([[1,2],[3,4]],[2,3])
array([[1, 2, 1, 2, 1, 2],
       [3, 4, 3, 4, 3, 4],
       [1, 2, 1, 2, 1, 2],
       [3, 4, 3, 4, 3, 4]])
  1. reshape函数
    在不改变数据内容的条件下,修改数据维度。
>>> import numpy as np
>>> a = np.arange(8)
[0 1 2 3 4 5 6 7]
>>> b=a.reshape(4
>>> print(b)
[[0 1]
 [2 3]
 [4 5]
 [6 7]]
>>>

随机函数

  1. random.uniform函数
    功能:random.uniform(low, high, size): 产生均匀分布的数组,在[low,high]范围内,size为数组长度
>>> random.uniform(0,5,20)
array([ 3.54073911,  1.45452369,  2.55413803,  4.46473477,  4.48146544,
        0.62792655,  1.03621439,  0.25733602,  2.20404922,  0.14938105,
        2.28416612,  3.24572024,  1.39243641,  3.38127451,  2.95431409,
        0.11990941,  2.79427044,  1.29626223,  2.07550599,  1.41762541])
  1. random.rand函数
    功能:产生元素均为[0, 1)的浮点数,服从均匀分布
>>> random.rand(3,5)
array([[ 0.85176361,  0.28418067,  0.20699102,  0.71170681,  0.37894006],
       [ 0.37958202,  0.5821716 ,  0.1213053 ,  0.01412197,  0.62404343],
       [ 0.94331619,  0.11345315,  0.14307748,  0.30844734,  0.72912914]])
  1. random.randn函数
    功能:产生元素均为[0, 1)的浮点数,服从标准正态分布
>>> random.randn(3,5)
array([[-1.17499716, -0.34973163,  0.00935449, -0.9145827 ,  0.73754291],
       [-0.90732152, -0.30879743, -0.01624762, -0.27330003, -0.25671239],
       [ 0.55841618, -0.08200828,  1.76866924,  1.79613533, -0.46784581]])
  1. random.randint函数
    功能:randint(low,high,(shape)): 依shape创建随机整数或整数数组,范围是[low,high)
>>> random.randint(3,5,(2,3))
array([[4, 3, 4],
       [4, 3, 4]])
  1. random.seed(s):随机数种子

  2. random.shuffle(a): 根据数组a的第一轴进行随机排列,改变数组a

>>> a=[3,4,5,6]
>>> random.shuffle(a)
>>> a
[6, 4, 5, 3]
  1. random.permutation(a): 根据数组a的第一轴进行随机排列,但是不改变原数组,将生成新数组
>>> random.permutation
array([3, 5, 4, 6])
>>> b = random.permutation
>>> b
array([5, 4, 6, 3])
  1. random.choice(a, size=None, replace=True, p=None): 从一维数组a中以概率p抽取元素,形成size形状新数组,replace表示是否可以重用元素,默认为False。
>>> random.choice(a,size=3,replace=True)
array([3, 6, 3])
  1. random.normal(loc, scale, size): 产生正态分布的数组,loc为均值,scale为标准差,size为形状
>>> random.normal(0,1,10)
array([-1.05368742, -0.91878414,  0.00852071,  1.01270555, -1.87120247,
        0.85779193, -0.93330128,  0.26973425, -0.91206319, -0.87171282])
  1. random.poisson(lam, size): 产生泊松分布的数组,lam随机事件发生概率,size为形状
>>> random.poisson(2,20)
array([3, 1, 3, 2, 2, 1, 4, 0, 1, 3, 3, 4, 1, 2, 1, 2, 2, 3, 0, 2])

统计函数

  1. sum函数
    sum(a, axis = None) : 依给定轴axis计算数组a相关元素之和,axis为整数或者元组
    axis=None时,计算数组中的所有值的平均值
    axis=0时,以列为单位,计算数组的每列的所有值的平均值
    axis=1时,以行为单位,计算数组的每行为单位的所有事的平均值
from numpy import *
>>> a = array([[1,2],[3,4]
>>> a
array([[1, 2],
       [3, 4]])
>>> mean(a,axis=0)
array([ 2.,  3.])
>>> mean(a,axis=1)
array([ 1.5,  3.5])
>>> mean(a,axis=None)
2.5
  1. mean函数
    mean(a, axis = None) : 同理,计算平均值

  2. average函数
    average(a, axis =None, weights=None) 依给定轴axis计算数组a相关元素的加权平均值
    average(a, axis =0, weights =[10, 5, 1]) weights中为权重,注意要和a的第一维匹配

  3. median函数
    median(a) : 计算数组a中元素的中位数(中值)

  4. std和var函数
    std(a, axis = None) :同理,计算标准差
    var(a, axis = None): 计算方差

  5. min和max函数
    min(a) max(a) : 计算数组a的最小值和最大值

  6. argmin和argmax函数
    argmin(a) argmax(a) : 计算数组a的最小、最大值的下标(注:是一维的下标)

  7. unravel_index函数
    unravel_index(index, shape) : 根据shape将一维下标index转成多维下标

  8. ptp函数
    ptp(a) : 计算数组a最大值和最小值的差

排序函数

  1. sort和sorted函数
    需要注意:sort()方法仅定义在list中,而sorted()方法对所有的可迭代序列都有效。
    可以添加参数:
    axis=0 #row sort
    axis=1 #column sort
    kind = 'quicksort'(快速排序,默认) | 'mergesort'(归并排序)| 'heapsort'(堆排序)
    order 如果数组包含字段,则是要排序的字段。
    key 按照什么来排序,eg., key=operator.itemgetter(1) #按照对象的第一个索引来排序
    reverse=True or False
import numpy as np
>>> print(sorted({8: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'}))
[2, 3, 4, 5, 8]
>>> a = np.array([[3,7],[9,1]])
>>> print(np.sort(a, axis=0)) 
[[3 1]
 [9 7]]
>>> print(np.sort(a, axis=1))
[[3 7]
 [1 9]]
  1. argsort函数
    对输入数组沿给定轴执行间接排序,并使用指定排序类型返回数据的索引数组(默认升序索引)。
>>> x = np.array([3,1,2])
>>> y = np.argsort(x)
>>> print(y)
[1 2 0]
>>> z=y[::-1] #降序索引
>>> print(z)
[0 2 1]

矩阵函数

  1. 转置函数
    y=transpose(A)或y=A.T #求矩阵A的转置矩阵

  2. shape函数
    模块位置:numpy.core.fromnumeric
    功能:读取矩阵的长度

from numpy import *
matDemo=mat(random.rand(3,5))
matDemo.shape[0] #获取矩阵第一维的长度,输入参数是一个整数表示维度
matDemo.shape[1] #获取矩阵第二维的长度,
shape(matDemo)   #获取矩阵的各个维度的大小,输入参数是一个矩阵
shape(matDemo)[i]#这样写也可以获取矩阵的第i个维度的大小
  1. matlib.empty函数
    返回一个新的矩阵,而不初始化元素。
>>> import numpy.matlib
>>> import numpy as np
>>> print(np.matlib.empty((2,2)))
[[ 10.  20.]
 [  3.   4.]]
>>>
  1. matlib.zeros函数
    返回以零填充的矩阵。
>> print(np.matlib.zeros((2,2)))
[ 0.  0.]
[ 0.  0.]]
  1. matlib.ones函数
    返回以一填充的矩阵。
>>> print(np.matlib.ones((2,2)))
[[ 1.  1.]
 [ 1.  1.]]
  1. matlib.eye函数
    返回一个矩阵,对角线元素为 1,其他位置为零。
>> print(np.matlib.eye(n = 3, M = 4, k = 0, dtype = float)) # n为行数、M为例数、k为对角线索引
[ 1.  0.  0.  0.]
[ 0.  1.  0.  0.]
[ 0.  0.  1.  0.]]
  1. matlib.identity函数
    返回给定大小的单位矩阵。单位矩阵是主对角线元素都为 1 的方阵。
>>> print(np.matlib.identity(5, dtype = float))
[[ 1.  0.  0.  0.  0.]
 [ 0.  1.  0.  0.  0.]
 [ 0.  0.  1.  0.  0.]
 [ 0.  0.  0.  1.  0.]
 [ 0.  0.  0.  0.  1.]]
  1. matlib.rand函数
    回给定大小的填充随机值的矩阵。
>>> print(np.matlib.rand(3,3))
[[ 0.14631622  0.99544318  0.35572909]
 [ 0.54713075  0.49181555  0.12965838]
 [ 0.86005346  0.2183979   0.82433139]]
  1. getA函数
    getA()函数是numpy.matrix下的一个函数,用作把矩阵转换成数组。
>>> import numpy as np
>>> x = np.matrix(np.arange(12).reshape((3,4)))
>>> x
matrix([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]])
>>> x.getA()
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

条件提取的函数

  1. where函数:返回输入数组中满足给定条件的元素的索引。
>>> x = np.arange(9).reshape(3,3)
>>> print(x)
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]]
>>> y = np.where(x > 3)
>>> print(x[y])
[ 4  5  6  7  8]
  1. extract函数:返回满足任何条件的元素。
>>> x = np.arange(9).reshape(3,3)
>>> condition = np.mod(x,2) == 0
>>> condition
array([[ True, False,  True],
       [False,  True, False],
       [ True, False,  True]], dtype=bool)
>>> print(np.extract(condition, x))
[0 2 4 6 8]
  1. nonzero函数
    返回输入数组中非零元素的索引。
>>> import numpy as np
>>> a = np.array([[30,40,0],[0,20,10],[50,0,60]])
>>> print(a)
[[30 40  0]
 [ 0 20 10]

>>> print(a[np.nonzero(a)])
[30 40 20 10 50 60]

算数运算函数

  1. add, subtract, multiply和divide函数
>>> import numpy as np
>>> a = np.arange(9, dtype = np.float_).reshape(3,3)
>>> print(a)
[[ 0.  1.  2.]
 [ 3.  4.  5.]
 [ 6.  7.  8.]]
>>> b = np.array([10,10,10])
>>> print(b)
[10 10 10]

>>> print(np.add(a,b))
[[ 10.  11.  12.]
 [ 13.  14.  15.]
 [ 16.  17.  18.]]
>>> print(np.subtract(a,b))
[[-10.  -9.  -8.]
 [ -7.  -6.  -5.]
 [ -4.  -3.  -2.]]
>>> print(np.multiply(a,b))
[[  0.  10.  20.]
 [ 30.  40.  50.]
 [ 60.  70.  80.]]
>>> print(np.divide(a,b))
[[ 0.   0.1  0.2]
 [ 0.3  0.4  0.5]
 [ 0.6  0.7  0.8]]
  1. reciprocal函数
    求倒数

  2. power函数
    第一个输入数组中的元素作为底数,计算它与第二个输入数组中相应元素的幂。

  3. mod或remainder函数
    返回输入数组中相应元素的除法余数。

>>> import numpy as np
>>> a = np.array([10,20,30])
>>> b = np.array([3,5,7])
>>> print(np.mod(a,b))
[1 0 2]
>>> print(np.remainder(a,b))
[1 0 2]

取整或舍入函数

  1. around函数
    返回四舍五入到所需精度的值。
    around(a,decimals) # decimals要舍入的小数位数,默认值为0。

  2. floor函数
    返回小于输入值的最大整数。例如1.2,返回1。

  3. ceil函数
    返回大于输入值的最小整数。例如1.2,返回2。