numpy数组与矩阵运算
Posted 数据攻城小狮子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了numpy数组与矩阵运算相关的知识,希望对你有一定的参考价值。
文章目录
numpy数组及其运算
创建数组
数组是用来存储若干数据的连续内存空间,其中的元素一般是相同类型的。
>>> import numpy as np
>>> np.array([1,2,3,4,5]) # 把列表转换为数组
array([1, 2, 3, 4, 5])
>>> np.array((1,2,3,4,5)) # 把元组转换为数组
array([1, 2, 3, 4, 5])
>>> np.array(range(5)) # 把range对象转换为数组
array([0, 1, 2, 3, 4])
>>> np.array([[1,2,3],[4,5,6]]) # 二维数组
array([[1, 2, 3],
[4, 5, 6]])
>>> np.arange(8) # 类似于内置函数range()
array([0, 1, 2, 3, 4, 5, 6, 7])
>>> np.arange(1,10,2) # 1-10 步长为2
array([1, 3, 5, 7, 9])
>>> np.linspace(0,10,11) # 等差数组,包含11个数
array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])
>>> np.linspace(0,10,11,endpoint=False) # 不包含终点
array([0. , 0.90909091, 1.81818182, 2.72727273, 3.63636364,
4.54545455, 5.45454545, 6.36363636, 7.27272727, 8.18181818,
9.09090909])
>>> np.logspace(0,100,10) # 相当于10**np.linspace(0,100,10)
array([1.00000000e+000, 1.29154967e+011, 1.66810054e+022, 2.15443469e+033,
2.78255940e+044, 3.59381366e+055, 4.64158883e+066, 5.99484250e+077,
7.74263683e+088, 1.00000000e+100])
>>> np.logspace(1,6,5,base=2) # 相当于2**np.linspace(1,6,5)
array([ 2. , 4.75682846, 11.3137085 , 26.90868529, 64. ])
>>> np.zeros(3) # 全0一维数组
array([0., 0., 0.])
>>> np.ones(3) # 全1一维数组
array([1., 1., 1.])
>>> np.zeros((3,3)) # 全0二维数组,3行3列
array([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
>>> np.zeros((3,1)) # 全0二维数组,3行1列
array([[0.],
[0.],
[0.]])
>>> np.zeros((1,3)) # 全0二维数组,1行3列
array([[0., 0., 0.]])
>>> np.ones((3,3)) # 全1二维数组
array([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
>>> np.ones((1,3)) # 全1二维数组
array([[1., 1., 1.]])
>>> np.identity(3) # 单位矩阵
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
>>> np.identity(2)
array([[1., 0.],
[0., 1.]])
>>> np.empty((3,3)) # 空数组,只申请空间,不初始化
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
>>> np.hamming(20) # Hamming窗口
array([0.08 , 0.10492407, 0.17699537, 0.28840385, 0.42707668,
0.5779865 , 0.7247799 , 0.85154952, 0.94455793, 0.9937262 ,
0.9937262 , 0.94455793, 0.85154952, 0.7247799 , 0.5779865 ,
0.42707668, 0.28840385, 0.17699537, 0.10492407, 0.08 ])
>>> np.blackman(10) # Blackman窗口
array([-1.38777878e-17, 5.08696327e-02, 2.58000502e-01, 6.30000000e-01,
9.51129866e-01, 9.51129866e-01, 6.30000000e-01, 2.58000502e-01,
5.08696327e-02, -1.38777878e-17])
>>> np.kaiser(12,5) # Kaiser窗口
array([0.03671089, 0.16199525, 0.36683806, 0.61609304, 0.84458838,
0.98167828, 0.98167828, 0.84458838, 0.61609304, 0.36683806,
0.16199525, 0.03671089])
>>> np.random.randint(0,50,5) # 随机数组,5个0到50之间的数字
array([30, 45, 3, 14, 39])
>>> np.random.randint(0,50,(3,5)) # 3行5列
array([[14, 17, 35, 17, 18],
[31, 43, 16, 16, 5],
[24, 32, 7, 33, 46]])
>>> np.random.rand(10) # 10个介于[0,1)的随机数
array([0.11167747, 0.40292433, 0.51850811, 0.04377307, 0.11010654,
0.67654253, 0.9580839 , 0.49403792, 0.90047855, 0.45184538])
>>> np.random.standard_normal(5)# 从标准正态分布中随机采样5个数字
array([-0.77732921, -0.15935702, -0.86469795, -0.67452421, 1.36960344])
>>> np.random.standard_normal(size=(3,4,2)) # 3页4行2列
array([[[ 0.33062086, -0.62089866],
[-0.75709293, -0.60898432],
[-1.19973726, -0.71412146],
[-1.28146037, -0.7100706 ]],
[[ 1.47959987, 0.51330101],
[-0.2683062 , -1.10700428],
[ 1.38848378, 0.0148741 ],
[ 0.73343418, -1.00783892]],
[[-0.2872382 , 0.81962319],
[-0.52615132, 1.15154691],
[-1.42739936, -0.71372472],
[-1.15310821, 0.60050732]]])
>>> np.diag([1,2,3,4]) # 对角矩阵
array([[1, 0, 0, 0],
[0, 2, 0, 0],
[0, 0, 3, 0],
[0, 0, 0, 4]])
测试两个数组的对应元素是否足够接近
numpy提供了isclose()和allclose()函数来测试两个数组中对应位置上的元素在允许的误差范围内是否相等,并可以接收绝对误差参数和相对误差参数。isclose()函数用来测试每一对元素是否相等并返回包含若干True/False的列表。allclose()函数用来测试所有对应位置上的元素是否都相等并返回单个True或False。
>>> import numpy as np
>>> x=np.array([1,2,3,4.001,5])
>>> y=np.array([1,1.999,3,4.01,5.1])
>>> print(np.allclose(x,y))
False
>>> print(np.allclose(x,y,rtol=0.2)) # 设置相对误差参数
True
>>> print(np.allclose(x,y,atol=0.2)) # 设置绝对误差参数
True
>>> print(np.isclose(x,y))
[ True False True False False]
>>> print(np.isclose(x,y,atol=0.2))
[ True True True True True]
修改数组中的元素值
>>> import numpy as np
>>> x=np.arange(8)
>>> x
array([0, 1, 2, 3, 4, 5, 6, 7])
>>> np.append(x,8) # 返回新数组,在尾部追加一个元素
array([0, 1, 2, 3, 4, 5, 6, 7, 8])
>>> np.append(x,[9,10]) # 返回新数组,在尾部追加多个元素
array([ 0, 1, 2, 3, 4, 5, 6, 7, 9, 10])
>>> np.insert(x,1,8) # 返回新数组,插入元素
array([0, 8, 1, 2, 3, 4, 5, 6, 7])
>>> x
array([0, 1, 2, 3, 4, 5, 6, 7])
>>> x[3]=8 # 使用下标的形式原地修改元素值
>>> x # 原来的数组被修改了
array([0, 1, 2, 8, 4, 5, 6, 7])
>>> x=np.array([[1,2,3],[4,5,6],[7,8,9]])
>>> x
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> x[0,2]=4 # 修改第1行第3列的元素值
>>> x
array([[1, 2, 4],
[4, 5, 6],
[7, 8, 9]])
>>> x[1:,1:]=1 # 切片,把行下标大于等于1,列下标也大于等于1的元素值都设置为1
>>> x
array([[1, 2, 4],
[4, 1, 1],
[7, 1, 1]])
>>> x[1:,1:]=[1,2] # 同时修改多个元素值
>>> x
array([[1, 2, 4],
[4, 1, 2],
[7, 1, 2]])
>>> x[1:,1:]=[[1,2],[3,4]] # 同时修改多个元素值
>>> x
array([[1, 2, 4],
[4, 1, 2],
[7, 3, 4]])
数组与标量的运算
>>> import numpy as np
>>> x=np.array((1,2,3numpy数组与矩阵运算