Python的Numpy模块
数组对象
- ndarray对象
NumPy中定义的最重要的对象是称为ndarray的N维数组类型。它描述相同类型的元素集合,可以使用基于零的索引访问集合中的项目。
ndarray中的每个元素在内存中使用相同大小的块。ndarray中的每个元素是数据类型对象的对象(称为 dtype)。
数组函数
- 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]]]
- 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])
- 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]])
- 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]]
>>>
随机函数
- 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])
- 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]])
- 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]])
- random.randint函数
功能:randint(low,high,(shape)): 依shape创建随机整数或整数数组,范围是[low,high)
>>> random.randint(3,5,(2,3))
array([[4, 3, 4],
[4, 3, 4]])
-
random.seed(s):随机数种子
-
random.shuffle(a): 根据数组a的第一轴进行随机排列,改变数组a
>>> a=[3,4,5,6]
>>> random.shuffle(a)
>>> a
[6, 4, 5, 3]
- random.permutation(a): 根据数组a的第一轴进行随机排列,但是不改变原数组,将生成新数组
>>> random.permutation
array([3, 5, 4, 6])
>>> b = random.permutation
>>> b
array([5, 4, 6, 3])
- 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])
- 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])
- 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])
统计函数
- 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
-
mean函数
mean(a, axis = None) : 同理,计算平均值 -
average函数
average(a, axis =None, weights=None) 依给定轴axis计算数组a相关元素的加权平均值
average(a, axis =0, weights =[10, 5, 1]) weights中为权重,注意要和a的第一维匹配 -
median函数
median(a) : 计算数组a中元素的中位数(中值) -
std和var函数
std(a, axis = None) :同理,计算标准差
var(a, axis = None): 计算方差 -
min和max函数
min(a) max(a) : 计算数组a的最小值和最大值 -
argmin和argmax函数
argmin(a) argmax(a) : 计算数组a的最小、最大值的下标(注:是一维的下标) -
unravel_index函数
unravel_index(index, shape) : 根据shape将一维下标index转成多维下标 -
ptp函数
ptp(a) : 计算数组a最大值和最小值的差
排序函数
- 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]]
- argsort函数
对输入数组沿给定轴执行间接排序,并使用指定排序类型返回数据的索引数组(默认升序索引)。
>>> x = np.array([3,1,2])
>>> y = np.argsort(x)
>>> print(y)
[1 2 0]
>>> z=y[::-1] #降序索引
>>> print(z)
[0 2 1]
矩阵函数
-
转置函数
y=transpose(A)或y=A.T #求矩阵A的转置矩阵 -
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个维度的大小
- matlib.empty函数
返回一个新的矩阵,而不初始化元素。
>>> import numpy.matlib
>>> import numpy as np
>>> print(np.matlib.empty((2,2)))
[[ 10. 20.]
[ 3. 4.]]
>>>
- matlib.zeros函数
返回以零填充的矩阵。
>> print(np.matlib.zeros((2,2)))
[ 0. 0.]
[ 0. 0.]]
- matlib.ones函数
返回以一填充的矩阵。
>>> print(np.matlib.ones((2,2)))
[[ 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.]]
- 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.]]
- 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]]
- 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]])
条件提取的函数
- 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]
- 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]
- 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]
算数运算函数
- 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]]
-
reciprocal函数
求倒数 -
power函数
第一个输入数组中的元素作为底数,计算它与第二个输入数组中相应元素的幂。 -
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]
取整或舍入函数
-
around函数
返回四舍五入到所需精度的值。
around(a,decimals) # decimals要舍入的小数位数,默认值为0。 -
floor函数
返回小于输入值的最大整数。例如1.2,返回1。 -
ceil函数
返回大于输入值的最小整数。例如1.2,返回2。