Python的Numpy
NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix))
一个用python实现的科学计算库,包括:
1、一个强大的N维数组对象Array;
2、比较成熟的(广播)函数库;
3、用于整合C/C++和Fortran代码的工具包;
4、实用的线性代数、傅里叶变换和随机数生成函数。numpy和稀疏矩阵运算包scipy配合使用更加方便。
NumPy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。多为很多大型金融公司使用,以及核心的科学计算组织如:Lawrence Livermore,NASA用其处理一些本来使用C++,Fortran或Matlab等所做的任务。
常见运算:
生成单位矩阵
# np.identity(n)可以生成n×n的单位矩阵
>>> np.identity(4)
array([[ 1., 0., 0., 0.],
[ 0., 1., 0., 0.],
[ 0., 0., 1., 0.],
[ 0., 0., 0., 1.]])
# 或者也可以用np.diag生成对角阵
>>> np.diag([1] * 4)
array([[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]])
# 最省事的是numpy.eye了,比numpy.identity还少打了几个字母,哈哈
np.eye(3)
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
初始化数组的10种方法
# 1、创建一个长度为10的数组,数组的值都是0
np.zeros(10,dtype=int)
# 2、创建一个3x5的浮点型数组,数组的值都是1
np.ones((3,5),dtype=float)
# 3、创建一个3x5的浮点型数组,数组的值都是3.14
np.full((3,5),3.14)
# 4、创建一个3x5的浮点型数组,数组的值是一个线性序列,从o开始,到20结束,步长为2,(它和内置的range()函数类似
np.arange(0,20, 2)
# 5、创建一个5个元素的数组,这5个数均匀的分配到0~1
np.linespace(0, 1, 5)
# 6、创建一个3x3的,在0~1均匀分配的随机数组成的数组
np.random.random(3,3))
# 7、创建一个3x3的,均值为0,方差为1,正太分布的随即数数组
np.random.normal(0,1,(3,3))
#8、创建一个3x3的,[0,10]区间的随机整形数组
np.random.randint(0,10,(3,3))
#9、创建一个3x3的单位矩阵
np.eye(3)
#10、创建一个由3个整形数组组成的未初始化的数组,数组的值是内存空间中的任意值
np.empty(3)
三目运算符
# 如果a>b的结果为真,h="变量1",如果为假,h="变量2"
a = 1
b = 2
h = ""
h = "变量1" if a>b else "变量2"
print(h)
矩阵乘法
- 默认a*b就是对应元素的乘积
- multiply(a,b)也是对应元素的乘积
- dot(a,b)会转化为矩阵的乘积
import numpy
a = numpy.array([[1,2],
[3,4]])
b = numpy.array([[5,6],
[7,8]])
a*b
>>>array([[ 5, 12],
[21, 32]])
np.multiply(a, b) # 相当于 m * n
>>>array([[ 5, 12],
[21, 32]])
a.dot(b)
>>>array([[19, 22],
[43, 50]])
numpy.dot(b,a)
>>>array([[23, 34],
[31, 46]])
矩阵转置、逆
# 转置
matrix.T
# 逆
matrix.I
矩阵|数组的迹
>>> #数组的迹
>>> d
array([[1, 2],
[3, 4]])
>>> f
array([[-2. , 1. ],
[ 1.5, -0.5]])
>>> np.trace(d)
5
>>> np.trace(f)
-2.4999999999999996