2.2 掌握 NumPy 矩阵与通用函数
- 2.2.1 创建NumPy矩阵
- 创建NumPy矩阵
- 矩阵的运算
- 矩阵的属性
- 2.2.2 掌握ufunc函数
- 1、常用的ufunc函数运算
- 2、ufunc函数的广播机制
2.2.1 创建NumPy矩阵
创建NumPy矩阵
1、使用mat函数创建矩阵: matr1 = np.mat(“1 2 3;4 5 6;7 8 9”)
2、使用matrix函数创建矩阵:matr2 = np.matrix([[1, 2, 3],[4, 5, 6],[7, 8, 9]])
使用mat函数创建矩阵时,若输入matrix或ndarray对象,则不会为它们创建副本。因此,调用mat函数与调用matrix(data, copy=False)等价。
3、有很多时候会根据小的矩阵创建大的矩阵,即将小矩阵组合成大矩阵。在NumPy中,可以使用bmat分块矩阵函数实现。
使用bmat函数合成矩阵:np.bmat(“arr1 arr2; arr1 arr2”)
# 2.2.1 创建NumPy矩阵
import numpy as np
# 1、使用mat函数与matrix函数创建矩阵
mat1 = np.mat("1 2 3; 4 5 6; 7 8 9") # 使用分号隔开数据
print(mat1)
matr1 = np.matrix([[1,2,3],[4,5,6],[7,8,9]])
print(matr1)
# 2、使用bmat函数创建矩阵 bmat分块矩阵
arr1 = np.ones((2,2))
arr2 = np.zeros((2,2))
print('arr1\n',arr1)
print('arr2\n',arr2)
arr3 = np.bmat("arr1 arr2; arr2 arr1")
print('arr3\n',arr3)
矩阵的运算
矩阵与数相乘:matr13
矩阵相加减:matr1±matr2
矩阵相乘:matr1matr2
矩阵对应元素相乘:np.multiply(matr1,matr2)
# 3、矩阵运算
mat2 = mat1*2
print(mat1)
print(mat2)
print('加\n', mat1+mat2)
print('减\n', mat1-mat2)
print('乘\n', mat1*mat2)
print('对应元素相乘\n', np.multiply(mat1,mat2))
矩阵的属性
# 4、查看矩阵的属性
print(mat1)
print(mat1.T) # 转置
print(mat1.H) # 共轭转置
print(mat1.I) # 逆矩阵
print(mat1.A) # 返回二维数组的视图
2.2.2 掌握ufunc函数
ufunc函数全称为通用函数(universal function),是一种能够对数组中所有元素进行操作的函数。ufunc函数是针对数组进行操作的,并且都以NumPy数组作为输出,因此不需要对数组中的每一个元素都进行操作。对一个数组进行重复运算时,使用ufunc函数比使用math库中的函数效率要高很多。
1、常用的ufunc函数运算
# 1、常用的ufunc函数运算
x = np.array([1,3,5])
y = np.array([2,3,4])
print(x+y)
print(x-y)
print(x*y)
print(x/y)
# 2、数组的比较运算
print(x<y)
# 3、数组的逻辑运算
print(np.all(x == y)) # np.all()表示逻辑and
print(np.any(x == y)) # np.any()表示逻辑or
2、ufunc函数的广播机制
广播(broadcasting)是指不同形状的数组之间执行算术运算的方式。需要遵循4个原则。
(1)让所有输入数组都向其中shape最长的数组看齐,shape中不足的部分都通过在前面加1补齐。
(2)输出数组的shape是输入数组shape的各个轴上的最大值。
(3)如果输入数组的某个轴和输出数组的对应轴的长度相同或者其长度为1时,这个数组能够用来计算,否则出错。
(4)当输入数组的某个轴的长度为1时,沿着此轴运算时都用此轴上的第一组值。
arr1 = np.array([[0, 0 ,0],[1,1,1],[2,2,2],[3,3,3]])
print(arr1)
arr2 = np.array([1,2,3])
print(arr2)
print('---------\n',arr1+arr2)
arr3 = np.array([1,2,3,4]).reshape((4,1)) # 改成4行1列
print(arr3)
print('---------\n',arr1+arr3)