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)
运行结果: