1、利用布尔值来取元素
import numpy as np mask = np.array([1,0,1],dtype=bool) # 1表示取对应的元素,0表示不取 arr = np.array([[1,2,3],[4,5,6],[7,8,9]]) print(arr[mask,2]) print(arr[:,mask])
运行结果:
[3 9] [[1 3] [4 6] [7 9]]
一维数组取值
arr = np.array([1,2,3,2,4,5,6,4,6]) mask = arr>3 print(arr[mask]) mask1 = arr==2 print(arr[mask1])
运行结果:
2、变换数组形态
(1)展平数组 ravel 和 flatten
# 一维数组变为二维数组 arr = np.arange(1,10,1).reshape(3,3) print(arr) # 二维数组变为一维数组 arr1 = np.array([[1,2,3],[4,5,6],[7,8,9]]) print(arr1) arr1.ravel() print(arr1)
运行结果:
3、展平数组 flatten
# 展平方式 flatten arr1 = np.array([[1,2,3],[4,5,6],[7,8,9]]) print(arr1) print('横向展平:',arr1.flatten()) print('纵向展平:',arr1.flatten('F'))
运行结果:
4、拼接 hstack 和 vstack
arr1 = np.array([[1,2,3],[4,5,6],[7,8,9]]) arr2 = np.ones((3,3)) print(arr2) # 横向拼接 print('横向拼接:\n',np.hstack((arr1,arr2))) # 纵向拼接 print('纵向拼接:\n',np.vstack((arr1,arr2)))
运行结果:
5、横向变换与纵向变换
# concatenate 横向变换与纵向变换 print('横向变换:\n',np.concatenate((arr1,arr2),axis=1)) print('纵向变换:\n',np.concatenate((arr1,arr2),axis=0))
运行结果:
6、横向分割与纵向分割 hsplit 与 vsplit
arr = np.diag([1,2,3,4]) print(arr) print('横向分割:\n',np.hsplit(arr,2)) print('纵向分割:\n',np.vsplit(arr,2)) print('横向分割:\n',np.split(arr,2,axis=1)) print('纵向分割:\n',np.split(arr,2,axis=0))
运行结果:
E:\Anaconda3\envs\Pachong\python.exe E:/Project/爬虫阶段/day-05-20/test.py [[1 0 0 0] [0 2 0 0] [0 0 3 0] [0 0 0 4]] 横向分割: [array([[1, 0], [0, 2], [0, 0], [0, 0]]), array([[0, 0], [0, 0], [3, 0], [0, 4]])] 纵向分割: [array([[1, 0, 0, 0], [0, 2, 0, 0]]), array([[0, 0, 3, 0], [0, 0, 0, 4]])] 横向分割: [array([[1, 0], [0, 2], [0, 0], [0, 0]]), array([[0, 0], [0, 0], [3, 0], [0, 4]])] 纵向分割: [array([[1, 0, 0, 0], [0, 2, 0, 0]]), array([[0, 0, 3, 0], [0, 0, 0, 4]])] Process finished with exit code 0
7、创建矩阵 mat, matrix, bmat
matr1 = np.mat('1 2 3;4 5 6;7 8 9') print(matr1) matr2 = np.matrix([[1,2,3],[4,5,6],[7,8,9]]) print(matr2) # 合并矩阵bmat arr = np.eye(3) arr1 = np.diag([1,2,3]) print('合并之后的大矩阵为:\n',np.bmat('arr arr1;arr1 arr'))
运行结果是:
E:\Anaconda3\envs\Pachong\python.exe E:/Project/爬虫阶段/day-05-20/test.py [[1 2 3] [4 5 6] [7 8 9]] [[1 2 3] [4 5 6] [7 8 9]] 合并之后的大矩阵为: [[1. 0. 0. 1. 0. 0.] [0. 1. 0. 0. 2. 0.] [0. 0. 1. 0. 0. 3.] [1. 0. 0. 1. 0. 0.] [0. 2. 0. 0. 1. 0.] [0. 0. 3. 0. 0. 1.]] Process finished with exit code 0
8、矩阵的四则运算
(1)矩阵的转置与求逆
matr1 = np.mat('1 2 3;4 5 6;7 8 9') # 专置 print('转置之后的矩阵为:\n',matr1.T) # 求逆 matr2 = np.mat('1 0;3 2') # 如果原有矩阵不可逆,会重新创建一个伪逆矩阵 matr21 = matr2.I print('求逆之后的矩阵为:\n',matr2.I) print(matr2*matr21)
运行结果:
矩阵的其他算法:加减乘
matr1 = np.mat('1 2 3;4 5 6;7 8 9') matr2 = np.eye(3,3) print(matr1+matr2) print(matr1-matr2) print(matr1*matr2)
运行结果:
9、ufunc函数 通用函数 ,对数组中所有元素进行操作的函数
x = np.array([1,2,3]) y = np.array([2,2,4]) print(x+y) print(x-y) print(x*y) print(x/y) # 比较运算,返回布尔值 print(x>y) print(x<y) print(x>=y) print(x<=y) print(x==y) print(x!=y) # 逻辑运算 print(np.all(x==y)) # 与 print(np.any(x==y)) # 或
运算结果:
10、广播机制:
如果两个数组的后缘维度(从末尾开始算起的维度)的轴长度相符或其中一方的长度为1,则认为它们是广播兼容的。广播会在缺失维度和(或)轴长度为1的维度上进行自动补全。
arr1 = np.array([[1,2,3],[4,5,6],[7,8,9]]) arr2 = np.array([1,1,1]) print(arr1+arr2) arr3 = ([1],[2],[3]) print(arr1+arr3)
运行结果: